Я знаю, что некоторые пользователи используют Doctrine 2 вместо Zend_Db в Zend Framework. Но я не знаю почему. Почему Doctrine2 лучше Zend_Db и почему Zend_Db не подходит?Стоит ли использовать Doctrine 2 с Zend Framework?
Благодаря
Я знаю, что некоторые пользователи используют Doctrine 2 вместо Zend_Db в Zend Framework. Но я не знаю почему. Почему Doctrine2 лучше Zend_Db и почему Zend_Db не подходит?Стоит ли использовать Doctrine 2 с Zend Framework?
Благодаря
(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.
Если у вас есть небольшой проект, которым обязан использовать определенную СУБД, вам не нужно ОРМ и Doctrine.
Если у вас есть проект, которым является большой и в будущем, возможно, потребуется адаптер для переключения из одной СУБД в другую, чем вы могли бы рассмотреть возможность использования доктрины
Как вы можете прочитать в описании доктрины:
Doctrine 2 является объектно-реляционным mapper (ORM) для PHP 5.3.0+, который обеспечивает прозрачную устойчивость для объектов PHP. Он находится поверх мощного уровня абстракции базы данных (DBAL). Объектно-реляционные Mappers Первичная задача - прозрачный перевод между объектами (PHP) и строк реляционной базы данных.
укажите «большой» :-) Спасибо – opHASnoNAME
Ваш ответ подразумевает, что основным преимуществом ORM является переносимость СУБД. Но простой PDO - или действительно любой DBAL - обеспечивает это.Я считаю, что реальная выгода ORM - это чистое различие между самими моделями и их персистентность/гидратация в/из репозитория. –
Zend_DB и Doctrine использует разные способы. Zend_DB работает как шлюз данных данных и шлюза данных строки. Доктрина - объект mapper.
В моих опытах Zend_DB достаточно и быстро для большинства обычных задач. Доктрина медленная и использует больше памяти, чем Zend_DB.
По моему опыту, сложнее поддерживать код, который не имеет четкого разделения между бизнес-логикой и уровнем доступа к данным. При работе с вашей моделью вы склонны использовать шаблоны Active Record. Например, расширение Zend_Db_Table_Row и Zend_Db_Table или даже создание собственных карт данных и репозиториев (шаблон хранилища). Думаю, это определенно для небольших проектов и команд. –
Согласовано. Zend_Db - беспорядок для любого среднего или большого проекта. Хотя в Doctrine у вас есть один репозиторий для каждого объекта, с Zend_Db вы в конечном итоге расширяете Zend_Db_Table, который использует шаблон Gateway Table Data, и включая методы getAllAllowedUsers() с таможенным SQL-соединением, соединяющим несколько таблиц, и в результате получается Zend_Db_Table_Row, t не имеет ничего с вашей реальной бизнес-моделью. Таким образом, вы объединяете Zend_Db_Table с шаблоном репозитория. Возможно, вы понимаете, что вам действительно нужен Data Mapper, поэтому вы начинаете создавать свою собственную реализацию, изобретая колесо. –
Или даже хуже: некоторые разработчики создают выборки на самом контроллере. 'listAction() {' $ UsersTable-> select() '...' –
Я знаю, что это старый вопрос, но через 2 года доктрины 2 + zend framework experince я бы не стал абсолютно рекомендовать использование доктрины 2. SLOW, это не хорошо для веб-приложения, оно имеет отличную абстракцию, но имеет и большие недостатки. – albanx