8

Gần đây tôi đã quan tâm đến thiết kế OOP thích hợp trong các ứng dụng web. Tôi nghĩ rằng tôi hiểu hầu hết các nguyên tắc và các mẫu thiết kế nhưng đôi khi tôi có vấn đề với việc đưa chúng vào thực tế.Dự án PHP với thiết kế OOP xuất sắc cho mục đích học tập

Tôi sử dụng MVC và tôi nghĩ tôi có thể thiết kế bộ điều khiển và chế độ xem theo cách OOP. Vấn đề tôi phải đối mặt là với các mô hình. Tôi đặc biệt bị ám ảnh bởi tiêm phụ thuộc và đảo ngược kiểm soát nói chung. Nó hoạt động tốt đẹp trong các ví dụ nhỏ nhưng tôi gặp khó khăn trong việc thiết kế các mô hình nhiều lớp phức tạp - Tôi đang suy nghĩ về các cách khác nhau để đưa các phụ thuộc vào các lớp thấp hơn, v.v.

Vì vậy, tôi quyết định tìm kiếm một số dự án mà tôi có thể học. Tôi đang tìm ứng dụng web PHP, tốt nhất là thực hiện với mô hình kiến ​​trúc MVC. Ngoài ra tôi không nhớ nếu nó có mô hình thiếu máu (thường được coi là antipattern nhưng trong các ứng dụng dựa trên dữ liệu nặng tôi thường buộc phải sử dụng các mô hình thiếu máu).

Cảm ơn rất nhiều.

EDIT: Tôi không tìm kiếm một khung công tác nhưng cho một ứng dụng hoàn chỉnh. Khung thường không có nhiều việc phải làm với kiến ​​trúc mô hình.

Trả lời

1

Magento Commerce có các mô hình nhiều lớp phức tạp (www.magentocommerce.com) mà bạn có thể chọn một hoặc hai mẹo.

Nhưng trải nghiệm cá nhân (cá nhân) của tôi với Magento rất bực bội: Tôi đã hack với nó xung quanh phiên bản 0.8-1.1 và nó xuất hiện trên thiết kế và kém tài liệu. Cố gắng tìm ra cách nó thực sự làm việc phức tạp như thế nào: bạn sẽ kết thúc với các tệp tin tấn mở trong trình soạn thảo của bạn, hầu hết chúng được gọi là Abstract.php. Hy vọng rằng mọi thứ đã được cải thiện một chặng đường dài kể từ đó.

+0

Xin chào, cảm ơn bạn đã đề xuất, điều này thực sự có thể tốt. Tôi nghĩ rằng "bạn sẽ kết thúc với tập tin tấn mở trong trình soạn thảo của bạn, hầu hết trong số họ được gọi là Abstract.php" là một mức giá bạn cần phải trả nếu bạn muốn thiết kế tốt. Thật không may, thiết kế OOP tốt thường không tầm thường. Mặt khác, sự phức tạp không đảm bảo chất lượng! : D – Tomik

-1

Khung CodeIgniter nói đến cái tâm như là một nguồn nghiên cứu đàng hoàng

+0

Xin cảm ơn, nhưng tôi không tìm kiếm một khung công tác mà là để ứng dụng hoàn chỉnh. Khung làm việc với các mô hình chỉ nông cạn (hoặc không phải ở tất cả). – Tomik

+3

@Tomik Làm thế nào? Điều đó dường như là một tuyên bố rộng lớn để tạo ra "khung công tác" nói chung. Theo kinh nghiệm của tôi, CodeIgniter hoàn toàn xử lý việc tách các lớp trong khi nhẹ và gọn gàng. – treeface

+0

Bạn phải đùa tôi. CodeIgniter là hư không gần thiết kế OOP tuyệt vời. Chỉ cần nhìn vào sự phụ thuộc từ _everything_ trên đối tượng siêu CodeIgniter. –

4

Trình đánh lửa mã là php4, tôi không khuyến khích quá nhiều. PHP OOP đã thay đổi kể từ đó. Ý tưởng hay hơn là kohana

Tôi đã học được rất nhiều bằng cách xem Konstrukt. Người tạo hoạt động bán trên SO quá =)

0

Nếu bạn đang tìm kiếm "thiết kế OOP tuyệt vời", có thể bạn đang nhìn vào góc sai. PHP không phải là rất mạnh ở các mẫu OOP của nó. Nếu nghiên cứu và tình hình của bạn cho phép tôi khuyên bạn nên xem xét một dự án Java để thay thế.

+2

Mọi người cứ nói với tôi điều này, tuy nhiên họ không đưa ra lý do. Vì vậy, tính năng OOP cần thiết của PHP bị bỏ sót là gì? – Tomik

+1

flamebait? nhiều ví dụ về các mẫu trong PHP trên web (google cho "mẫu php"). Kể từ 5.3 ngôn ngữ là rất có khả năng. Tôi nghĩ rằng nó nhiều hơn về kỹ năng của các lập trình viên trong một dự án chứ không phải chính ngôn ngữ ảnh hưởng đến sự xuất sắc trong thiết kế ... – Steve

+1

Một ngôn ngữ OO "tinh khiết hơn" không thực thi một thiết kế tuyệt vời. Đó là tùy thuộc vào nhà thiết kế. Và tôi không biết khi nào bạn đã xem qua PHP, nhưng kể từ phiên bản 5, khả năng đối tượng của nó khá mạnh. –

1

Tôi khuyên bạn nên xem qua Symfony 2.

Đây có lẽ là dự án PHP được thiết kế tốt nhất mà bạn sẽ tìm thấy. Đó là SOLID, DRY và sử dụng các mẫu có thể áp dụng.

+1

Symfony thật tuyệt, và kiểm tra nó là Doctrine 2.0 của chị em. –

1

Vấn đề bạn đang gặp phải với "Mô hình" chính xác là gì? Bạn nói về Dependency Injection, nhưng điều đó thực sự không liên quan gì tới khái niệm "Model" trong ngữ cảnh MVC. Nếu bạn đang tìm kiếm các ví dụ về cách quản lý và truyền các phụ thuộc xuống các hệ thống phân cấp đối tượng, bạn có thể muốn xem xét Symfony 2.0 Dependency Injection Container thực hiện.

+1

Tôi biết Symfony DI Container, nó khá tốt. Nhưng những gì tôi muốn thấy là một số DI thực hiện trong hành động. Ví dụ, ngay cả với DI Container hoàn chỉnh bạn vẫn cần phải giải quyết vấn đề tiêm chích chính nó. Mô hình có liên quan gì với DI? Bạn cần DI để thực hiện chất lượng các mô hình nhiều lớp. – Tomik

Các vấn đề liên quan