Я знаю, что некоторые пользователи используют Doctrine 2 вместо Zend_Db в Zend Framework. Но я не знаю почему. Почему Doctrine2 лучше Zend_Db и почему Zend_Db не подходит?
Спасибо
Я знаю, что некоторые пользователи используют Doctrine 2 вместо Zend_Db в Zend Framework. Но я не знаю почему. Почему Doctrine2 лучше Zend_Db и почему Zend_Db не подходит?
Спасибо
(7-Март-2013) Отказ от ответственности: этот ответ, вероятно, сейчас немного устарел. На данный момент я не соглашаюсь с сообществом PHP, и это сравнение между Doctrine ORM v2 и Zend Framework v1. Это сравнение яблок и апельсинов, потому что они две разные вещи.
Внезапный Zend_Db представляет собой просто расширенный слой абстракции базы данных поверх PDO, где Doctrine 2 является реляционным Map Object (который находится поверх его собственного DBAL).
Doctrine 2 намного лучше подходит для более сложных слоев домена, потому что вся ваша бизнес-логика, логика сохранения и т.д. разделены на несколько классов, поэтому они не обслуживают несколько ролей. Кроме того, поскольку у вас есть больше классов, которые являются более чистыми и слабо связанными, это значительно упрощает их тестирование.
Кроме того, вы будете писать только часть SQL, которую вы используете Zend_Db, потому что вы можете манипулировать объектами объекта, а Doctrine преобразует эти изменения в базу данных. Сгенерированный SQL также использует транзакции, которые дают вам достойную производительность!
Я бы рекомендовал вам ознакомиться с Domain-Driven Design, чтобы лучше понять, почему Doctrine 2 настолько замечателен.
Не поймите меня неправильно, но вы можете сделать DDD с Zend_Db, но на самом деле это не OOTB (потому что это не ORM), и не будет почти таким же мощным и полнофункциональным, как Doctrine 2.
Если у вас есть небольшой проект, который должен использовать определенную СУБД, вам не нужны ORM и Doctrine.
Если у вас большой проект, и в будущем вам могут понадобиться адаптеры для переключения с одного dbms на другой, вы можете использовать Doctrine
Как вы можете прочитать в описании Doctrine:
Доктрина 2 - объектно-реляционная mapper (ORM) для PHP 5.3.0+, который обеспечивает прозрачную Объекты PHP. Он сидит поверх мощный слой абстракции базы данных (DBAL). Объектно-реляционные мапперы основной задачей является прозрачность перевод между объектами (PHP) и реляционных строк базы данных.
Zend_DB и Doctrine используют разные способы. Zend_DB работает как шлюз данных данных и шлюза данных строки. Доктрина - объект mapper.
В моем опыте Zend_DB достаточно и быстро для большинства обычных задач. Доктрина медленная и использует больше памяти, чем Zend_DB.