Dự án PHP nguồn mở nào có thiết kế OOP 'hoàn hảo' mà tôi có thể học hỏi? [đóng cửa]


9

Tôi là người mới tham gia OOP và tôi học tốt nhất bằng ví dụ.

Bạn có thể nói câu hỏi này tương tự như dự án nguồn mở Scala nào tôi nên nghiên cứu để tìm hiểu các thực tiễn mã hóa tốt nhất - nhưng trong PHP.

Tôi đã nghe nói rằng Symfony có 'kiến trúc' tốt nhất (tôi sẽ không giả vờ rằng tôi biết chính xác điều đó có nghĩa là gì), cũng như ORM của Doctrine. Có đáng để dành nhiều tháng để đọc mã nguồn của các dự án này, cố gắng suy luận các mô hình được sử dụng và học các thủ thuật mới?

Tôi đã thấy số lượng trang web phân tích bằng nhau và thích cơ sở mã của Zend (sẽ cung cấp các liên kết nếu thấy cần thiết).

Bạn có biết bất kỳ dự án nào khác sẽ khiến bất kỳ nhà phát triển OOP kỳ cựu nào rơi nước mắt vì vui mừng không?

Xin vui lòng cho tôi thêm rằng tính thực tế và phạm vi sử dụng không phải là một mối quan tâm ở đây - tôi chỉ muốn làm:

  • Chọn một dự án có codebase được coi là tuyệt vời bởi các nhà phát triển tốt hơn và lớn hơn tôi.
  • Viết mã đạt được những gì dự án làm.
  • So sánh kết quả và cố gắng học những gì tôi không biết.

Về cơ bản, một codebase quan tâm học thuật. Bất kỳ đề nghị xin vui lòng?


4
Tôi không phải là một chuyên gia, nhưng tôi không nghĩ OOP là phổ biến hoặc nhất thiết phải được khuyến khích trong PHP.
asfallows

3
@asfallows Quả thực là như vậy - nhưng với việc phát hành PHP 5.3, mọi thứ đang thay đổi và có một khuynh hướng dứt khoát đối với việc sử dụng tất cả các tính năng mới đánh đòn mà ngôn ngữ cung cấp cho mã hóa OOP.
Aditya MP

3
Không có thứ gọi là "thiết kế OOP hoàn hảo".
Robert Harvey

1
Tôi thấy bạn đã là thành viên tại Code Review Stack Exchange. Sử dụng rộng rãi, đó là Stack Exchange có giá trị nhất khi tìm hiểu, chúng tôi rất muốn xem và thảo luận về mã bạn sẽ viết khi tìm hiểu về OOP ...
yannis

1
@Arkh Harsh. Hãy thử kiềm chế các cuộc tấn công cá nhân. Nếu bạn không đồng ý với sự sụp đổ, hãy dành thời gian để viết bình luận bằng văn bản.

Câu trả lời:


2

Symfony 2 có lẽ là dự án lớn tốt nhất để học hỏi nhưng khá lớn.

Gần đây tôi đã tìm thấy một dự án PHP mã nguồn mở nhỏ gọn và được gọi là Phrozn (trình tạo trang tĩnh). Cơ sở mã của nó tương đối nhỏ nên bạn có thể kiểm tra nó khá nhanh.

CẬP NHẬT:

Phrozn là hiện đại (sử dụng PHP 5.3+ và dựa vào nó rất nhiều), nó có thể mở rộng, có phạm vi bảo hiểm mã nghiêm ngặt. Nó cũng sử dụng lại mã từ các dự án được viết tốt khác như Symfony (YAML), Zend (Autoloader), PEAR và Twig.

OOP, sử dụng các không gian tên và nó được ghi lại rất tốt. Tôi không nói nó hoàn hảo cũng không thể so sánh với một dự án như Symfony nhưng nó đáng để thử.


1
Bạn có thể cho chúng tôi biết thêm một vài chi tiết về cơ sở mã của Phrozn không? Điều gì làm cho nó lý tưởng cho việc học tập, ngoài kích thước của nó?
yannis

1
@YannisRizos :) Mã có thể được tìm thấy tại github, vì vậy bạn có thể xem nhanh. github.com/farazdagi/phrozn
Christian P

17

Vâng, cá nhân tôi sẽ nói hãy kiểm tra Symfony2 . Đó là khá nhiều dự án lớn đầu cuối tốt nhất mà tôi đã thấy. Điều đó không có nghĩa là không có phần xấu đối với nó, nhưng về tổng thể, nó khá tốt.

Bây giờ, Zend đang ở giữa. Nếu bạn nhìn vào API công khai, nó khá tốt. Có một số phần WTF cho nó, nhưng đối với hầu hết các phần đó là ok. Nếu bạn bắt đầu đào sâu vào nó nhiều hơn, bạn sẽ tìm thấy nhiều mã WTF hơn ...

Theo như những gì cần tránh hoàn toàn:

  • CodeIgniter - Mô hình Fubar MVC
  • Kohana - Rất nhiều thống kê
  • Bánh - ngữ nghĩa đối tượng PHP 4
  • Drupal - Không phải OOP chút nào
  • Wordpress - Không phải OOP chút nào

Đối với phần còn lại, bạn sẽ thấy nó thành công và bỏ lỡ. Có những phần tốt và xấu cho tất cả các thiết kế. Hãy nhìn vào Lithium , nó có một số khái niệm thiết kế thực sự tuyệt vời. Nhưng nó cũng có rất nhiều chuyển hướng fubar và tin tặc để làm cho nó hoạt động.

Và đó là những gì cần mang đến ngân hàng. Không có thiết kế hoàn hảo, đừng cố gắng tìm một. Thay vào đó, hãy nhìn vào rất nhiều người trong số họ và tự quyết định. Hãy thử từng cái, cố gắng phá vỡ chúng. Cố gắng hiểu chúng chỉ bằng cách đọc chúng (đó là một thử nghiệm tốt về thiết kế lành mạnh) ...

Chỉ là ý kiến ​​cá nhân của tôi ...


2
+1 cho symfony2, nhưng quan trọng hơn là toàn bộ tòa nhà cộng đồng xung quanh nó. ZF2 có lẽ cũng đáng được đề cập đến, mặc dù chúng dường như giữ mọi thứ trừu tượng hơn.
Adrian Schneider

1
+1 cho symfony2 cũng được. Nó có một cơ sở mã thực sự vững chắc, nó sử dụng rất nhiều thực tiễn tốt nhất từ ​​các ngôn ngữ và khung khác, một cộng đồng tuyệt vời, các nhà phát triển cốt lõi là những người hữu ích, có thể tiếp cận. Mặc dù sự phát triển đang diễn ra với việc tái cấu trúc mọi thứ trên đường đi để làm cho chúng tốt hơn, tình trạng hiện tại đã sẵn sàng để sản xuất. Fabien Potencier, người tạo ra Symfony, có một loạt các bài đăng trên blog ( fabien.potencier.org ) về việc tạo một khung với các thành phần Symfony. Nó nên là một điểm khởi đầu tốt, vì ông đã viết bài đăng này để giúp mọi người học tập.
Hakan Deryal

Đọc mã nguồn symfony2 thực sự là một nguồn cảm hứng trong khi không quá phức tạp để nắm bắt, điểm tốt. Tuy nhiên, đó không phải là TDD được phát triển, có lẽ sẽ là một nền tảng cho thiết kế "OOP" hoàn hảo "- bởi vì không có thiết kế nào là hoàn hảo, điều đó có nghĩa là bạn cần thay đổi nó và bạn cần phải thử nghiệm.
hakre

2
Chà, bạn không thể so sánh Symfony, Zend hay Kohana với Wordpress và Drupal.
Daniel Ribeiro

Cảm ơn bạn! Tôi đã tải xuống Symfony, tôi sẽ bắt đầu hiểu nó. Cảm ơn vì đã xác nhận nỗi sợ hãi của tôi về CodeIgniter: Tôi đã từng nghe trên SilverStripe IRC rằng "CodeIgniter là một OOP Framework mới bắt đầu và có rất nhiều lỗi người mới bắt đầu" - và họ đã bắt đầu viết lại trong PHP4, nhưng vẫn chưa có thời gian để tái cấu trúc rộng rãi như vậy Tôi nghi ngờ họ đã sử dụng tất cả các tính năng tuyệt vời mà ngôn ngữ này cung cấp. Xin lưu ý rằng tôi KHÔNG loại bỏ CI! Tôi yêu khuôn khổ và thiên đường biết có bao nhiêu dự án trở nên dễ dàng hơn cho tôi vì tôi đã sử dụng nó. Nhưng đối với một mục đích học tập, nó có thể không phải là tốt nhất.
Aditya MP
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.