Подтвердить что ты не робот

Стоит ли использовать Doctrine 2 с Zend Framework?

Я знаю, что некоторые пользователи используют Doctrine 2 вместо Zend_Db в Zend Framework. Но я не знаю почему. Почему Doctrine2 лучше Zend_Db и почему Zend_Db не подходит?

Спасибо

4b9b3361

Ответ 1

(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.

Ответ 2

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

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

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

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

Ответ 3

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

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