2011-02-02 32 views

Trả lời

25

(7-Mar-2013) Disclaimer: Câu trả lời này có lẽ bây giờ là một chút ra khỏi ngày. Tôi không theo kịp cộng đồng PHP tại thời điểm này và so sánh này là giữa Doctrine ORM v2 và Zend Framework v1. Đây là một quả táo so với cam so sánh vì chúng là hai thứ khác nhau.


Out-of-the-box Zend_Db là chỉ cần thêm một cơ sở dữ liệu Abstraction Layer tăng cường trên đầu trang của PDO, nơi như Học thuyết 2 là một Object Relational Mapper (mà ngồi trên đầu trang của DBAL riêng của nó).

Học thuyết 2 tốt hơn cho các lớp miền phức tạp hơn, bởi vì tất cả logic nghiệp vụ, logic kiên trì, vv được phân tách trên nhiều lớp, vì vậy chúng không phân phối nhiều vai trò. Ngoài ra, bởi vì bạn có nhiều lớp học hơn - được làm sạch hơn và lỏng lẻo hơn - nó làm cho việc kiểm tra chúng dễ dàng hơn nhiều.

Hơn nữa, bạn sẽ chỉ viết một phần của SQL mà bạn đang sử dụng Zend_Db, vì bạn có thể thao tác các đối tượng thực thể của bạn và Doctrine dịch những thay đổi đó sang cơ sở dữ liệu. SQL được tạo ra cũng tận dụng các giao dịch mang lại cho bạn hiệu năng tốt!

Tôi khuyên bạn nên đọc trên Thiết kế theo hướng miền để hiểu rõ hơn lý do Doctrine 2 thật tuyệt vời. Tuy nhiên, đừng làm tôi sai, bạn có thể làm DDD với Zend_Db nhưng nó không thực sự có OOTB (vì nó không phải là ORM), và sẽ không gần như mạnh mẽ và đầy đủ tính năng như Doctrine 2.

+1

Đồng ý. Zend_Db là một mớ hỗn độn cho bất kỳ dự án trung bình hoặc lớn nào. Trong khi trong Doctrine bạn có một kho lưu trữ cho mỗi thực thể, với Zend_Db bạn sẽ kết thúc việc mở rộng Zend_Db_Table, sử dụng mẫu Bảng dữ liệu cổng, và bao gồm các phương thức như getAllAllowedUsers() với hải quan SQL nối nhiều bảng và kết quả là một Zend_Db_Table_Row thực sự không ' t không có gì với mô hình kinh doanh thực tế của bạn. Vì vậy, bạn hợp nhất Zend_Db_Table với mẫu Repository. Có thể bạn nhận ra rằng bạn thực sự cần một Trình ánh xạ dữ liệu, vì vậy bạn bắt đầu tạo việc triển khai của riêng bạn, phát minh lại bánh xe. –

+0

Hoặc thậm chí tệ nhất: Một số nhà phát triển tạo ra các lựa chọn trên chính bộ điều khiển. 'listAction() {' $ UsersTable-> select() '...' –

+0

Tôi biết đây là một câu hỏi cũ, nhưng trong 2 năm học thuyết 2 + zend framework experince tôi sẽ không hoàn toàn khuyên bạn nên dùng giáo lý 2 IT IS SLOW SLOW, nó không phải là tốt cho ứng dụng web, nó có trừu tượng tuyệt vời nhưng cũng có những hạn chế lớn. – albanx

0

Nếu bạn có dự án nhỏ buộc phải sử dụng DBMS cụ thể, bạn không cần ORM và Doctrine.

Nếu bạn có một Mà dự án lớn và trong tương lai có thể cần adapter để chuyển đổi từ một DBMS khác, hơn bạn có thể xem xét sử dụng Doctrine,

Như bạn có thể đọc trong các mô tả thuyết:

Học thuyết 2 là một đối tượng quan hệ đối tượng (ORM) cho PHP 5.3.0+ rằng cung cấp sự minh bạch trong suốt cho các đối tượng PHP . Nó nằm trên đầu trang của một lớp trừu tượng cơ sở dữ liệu mạnh mẽ (DBAL). Đối tượng quan hệ người lập bản đồ nhiệm vụ chính là minh bạch dịch giữa các đối tượng (PHP) và hàng cơ sở dữ liệu quan hệ.

+1

hãy xác định "lớn" :-) Cảm ơn – opHASnoNAME

+1

Câu trả lời của bạn ngụ ý rằng lợi ích chính của ORM là tính di động DBMS. Nhưng đồng bằng PDO - hoặc thực sự bất kỳ DBAL - cung cấp điều đó.Tôi thấy lợi ích thực sự của ORM là sự phân biệt rõ ràng giữa các mô hình và độ bền/hydrat hóa của chúng đến/từ một kho lưu trữ. –

0

Zend_DB và Doctrine sử dụng các cách khác nhau. Zend_DB hoạt động giống như cổng dữ liệu bảng và cổng dữ liệu hàng. Doctrine là trình ánh xạ đối tượng.

Trong kinh nghiệm của tôi, Zend_DB đủ và nhanh cho các tác vụ phổ biến nhất. Doctrine chậm và sử dụng nhiều bộ nhớ hơn Zend_DB.

+0

Theo kinh nghiệm của tôi, việc duy trì mã không có sự tách biệt rõ ràng giữa logic nghiệp vụ và lớp truy cập dữ liệu sẽ khó khăn hơn. Bạn có xu hướng sử dụng các mẫu Active Record giống nhau khi xử lý mô hình của mình. Ví dụ, mở rộng Zend_Db_Table_Row và Zend_Db_Table hoặc thậm chí tạo các trình ánh xạ và kho dữ liệu của riêng bạn (mẫu Kho lưu trữ). Nó chắc chắn cho các dự án nhỏ và các đội, tôi nghĩ vậy. –

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