Doctrine2 or zend_db

Я использовал Zend_Db, и я нашел его очень хорошим, но почему некоторые книги и документация защищают использование Doctrine 2 над Zend_Db? Я не эксперт в ORM, но есть ли какая-то функциональность, которую Zend_Db может сделать, и Doctrine ORM не может?

Что более безопасно?

Эксперты, которые используют оба варианта: какой из них вы советуете мне использовать?

Есть ли какая-нибудь книга для Doctrine 2?

Ответ 1

.. но это их некоторая Функциональность, которую Zend_Db может сделать, и ORM не может

Никакой реальной функциональности, как таковой; в конце концов, вы можете обрабатывать сохранение через ZDB и ORM или любой другой метод. Но использование ORM иногда позволяет сосредоточить внимание немного больше на ваших моделях и меньше на вашей настойчивости.

и есть ли какая-нибудь книга для Doctrine 2??? а не документацию!

На самом деле, я считаю, что официальная документация Doctrine2 как этот от Boris Guery), который позволяет вам настройте Doctrine при загрузке, чтобы у вас был легкий доступ к диспетчеру сущности в ваших плагинах, контроллерах и других сервисах. Для примера, который выполняет загрузку Doctrine2 с помощью метода _initXXX(), см. Код в этом проекте под руководством Эдди Джауде.

Наконец, нужно ли мне изучать доктрину 1.2 перед Доктриной 2?

Нет, Doctrine2 явно отличается от Doctrine1.

и для экспертов, которые используют как то, что вы посоветуете мне использовать?

Ну, я не эксперт. Но я нахожу Doctrine2 (который является чем-то вроде подхода настойчивости на основе карт) более естественным, чем подход Doctrine1 ActiveRecord, более легко позволяющий моим моделям представлять фактические объекты домена - пользователи, сообщения и т.д., А не быть шлюзами для извлечения объектов и настойчивость. Используя EntityManager в качестве основного средства для сохранения, мне легче структурировать другие службы, которые нуждаются в постоянстве; Я просто передаю EntityManager как аргумент конструктора. Репозитории Doctrine2 обеспечивают чистое место для размещения пользовательских запросов.

Не все это невозможно в ZDB или других ORM; это просто, что я считаю это простым с Doctrine2.

Реферат: Doctrine2 является удивительным.; -)

Ответ 2

Zend_Db не является ORM. Это всего лишь набор классов, которые реализуют функциональность базы данных.

Zend_Db_Table реализует шаблон проектирования Gateway Table Data. С этим вы можете написать несколько классов расширения и создать свой собственный объект mapper, но не предполагайте, что Zend_Db является "внебиржевым" решением ORM, таким как Doctrine.

Я обнаружил, что Zend_Db менее идеален для написания сложных объектов, но я предпочитаю его ORM, поскольку я чувствую, что у меня больше контроля над тем, как он себя ведет.

Ответ 3

Я помню, где-то читал, что даже разработчики Zend_Db были недовольны конечным результатом. На практике я обнаружил, что он неуклюж, медленный и на самом деле не имеет большого преимущества по сравнению с использованием прямого PDO для доступа к базе данных.

Doctrine 2, хотя у меня очень мало опыта с ней, похоже, построена на гораздо более сильных концепциях и вряд ли вызовет у вас проблемы в будущем.

Тем не менее, это очень важный случай того, что сработает для вас - если вы уже используете Zend_Db, возможно, вам лучше не придерживаться этого, а не изучать новую библиотеку.