Intereting Posts
Когда нужно санировать код PHP и MySQL, прежде чем хранить его в базе данных или когда он отображается? Как я могу экспортировать в XML-файл, а не печатать его на экране? PHP – не удалось открыть поток: нет такого файла или каталога в Что случилось с моей контактной формой AJAX? (php mail ()) Symfony2, Как передать параметры сортировки и направления с помощью KnpPaginatorBundle и QueryBuilder Выход Json_encode umlauts Как мне хранить мои saS122 соленые и хешированные пароли в MySQL? как объявить php-класс с именем переменной PHPExcel – Как установить URL-адрес Настройка PDO / MySQL LIMIT с помощью именных заполнителей Howto Reverse-Engineer REST-Webservice Отправить форму, включая загрузку файла через jQuery ajax Проверить флажок FCKEditor или нет PHP – запрашивать одно значение для каждой итерации или извлекать все при запуске и извлекать из массива? как обновить раскрывающееся меню Select2 после загрузки ajax другого контента?

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

Я знаю, что некоторые пользователи используют 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.