2011-02-02 2 views

ответ

25

(7-Mar-2013) Отказ от ответственности: Этот ответ, вероятно, теперь немного устарели. На данный момент я не соглашаюсь с сообществом PHP, и это сравнение между Doctrine ORM v2 и Zend Framework v1. Это сравнение яблок и апельсинов, потому что это две разные вещи.


Из-из-коробки Zend_Db более просто расширенная база данных уровень абстракции поверх PDO, где, как доктрина 2 представляет собой объектно-реляционного Mapper (который сидит на вершине его собственной DBAL).

Doctrine 2 намного лучше для более сложных слоев домена, потому что вся ваша бизнес-логика, логика сохранения и т. Д. Разделены на несколько классов, поэтому они не обслуживают несколько ролей. Кроме того, поскольку у вас есть больше классов, которые являются более чистыми и слабо связанными, это значительно упрощает их тестирование.

Более того, вы будете писать только часть SQL, которую вы используете Zend_Db, потому что вы можете манипулировать объектами сущности, а Doctrine преобразует эти изменения в базу данных. Сгенерированный SQL также использует транзакции, которые дают вам достойную прибыль!

Я бы рекомендовал вам ознакомиться с Domain-Driven Design, чтобы лучше понять, почему Doctrine 2 настолько замечателен.

Не поймите меня неправильно, хотя, вы можете сделать DDD с Zend_Db, но это на самом деле не существует OOTB (потому что это не ОРМ), и не будет столь мощным и полнофункциональным как Учение 2.

+1

Согласовано. Zend_Db - беспорядок для любого среднего или большого проекта. Хотя в Doctrine у ​​вас есть один репозиторий для каждого объекта, с Zend_Db вы в конечном итоге расширяете Zend_Db_Table, который использует шаблон Gateway Table Data, и включая методы getAllAllowedUsers() с таможенным SQL-соединением, соединяющим несколько таблиц, и в результате получается Zend_Db_Table_Row, t не имеет ничего с вашей реальной бизнес-моделью. Таким образом, вы объединяете Zend_Db_Table с шаблоном репозитория. Возможно, вы понимаете, что вам действительно нужен Data Mapper, поэтому вы начинаете создавать свою собственную реализацию, изобретая колесо. –

+0

Или даже хуже: некоторые разработчики создают выборки на самом контроллере. 'listAction() {' $ UsersTable-> select() '...' –

+0

Я знаю, что это старый вопрос, но через 2 года доктрины 2 + zend framework experince я бы не стал абсолютно рекомендовать использование доктрины 2. SLOW, это не хорошо для веб-приложения, оно имеет отличную абстракцию, но имеет и большие недостатки. – albanx

0

Если у вас есть небольшой проект, которым обязан использовать определенную СУБД, вам не нужно ОРМ и Doctrine.

Если у вас есть проект, которым является большой и в будущем, возможно, потребуется адаптер для переключения из одной СУБД в другую, чем вы могли бы рассмотреть возможность использования доктрины

Как вы можете прочитать в описании доктрины:

Doctrine 2 является объектно-реляционным mapper (ORM) для PHP 5.3.0+, который обеспечивает прозрачную устойчивость для объектов PHP. Он находится поверх мощного уровня абстракции базы данных (DBAL). Объектно-реляционные Mappers Первичная задача - прозрачный перевод между объектами (PHP) и строк реляционной базы данных.

+1

укажите «большой» :-) Спасибо – opHASnoNAME

+1

Ваш ответ подразумевает, что основным преимуществом ORM является переносимость СУБД. Но простой PDO - или действительно любой DBAL - обеспечивает это.Я считаю, что реальная выгода ORM - это чистое различие между самими моделями и их персистентность/гидратация в/из репозитория. –

0

Zend_DB и Doctrine использует разные способы. Zend_DB работает как шлюз данных данных и шлюза данных строки. Доктрина - объект mapper.

В моих опытах Zend_DB достаточно и быстро для большинства обычных задач. Доктрина медленная и использует больше памяти, чем Zend_DB.

+0

По моему опыту, сложнее поддерживать код, который не имеет четкого разделения между бизнес-логикой и уровнем доступа к данным. При работе с вашей моделью вы склонны использовать шаблоны Active Record. Например, расширение Zend_Db_Table_Row и Zend_Db_Table или даже создание собственных карт данных и репозиториев (шаблон хранилища). Думаю, это определенно для небольших проектов и команд. –

Смежные вопросы