Я знаю, что некоторые пользователи используют 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 является объектно-реляционным Mapper (который находится поверх собственного 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:
Doctrine 2 – объектно-реляционный картограф (ORM) для PHP 5.3.0+, который обеспечивает прозрачную устойчивость для объектов PHP. Он находится поверх мощного уровня абстракции базы данных (DBAL). Первичная задача объектно-реляционных сопоставлений – это прозрачный перевод между объектами (PHP) и реляционными базами данных.
Zend_DB и Doctrine используют разные способы. Zend_DB работает как шлюз данных данных и шлюза данных строки. Доктрина – объект mapper.
В моем опыте Zend_DB достаточно и быстро для большинства обычных задач. Доктрина медленная и использует больше памяти, чем Zend_DB.