Я хотел бы услышать от тех, кто использовал Doctrine 2 (или позже) и Propel 1.5 (или позже). Большинство сравнений между этими двумя объектными реляционными сопоставителями основаны на старых версиях - Doctrine 1 и Propel 1.3 / 1.4, и оба ORM претерпели значительные изменения в своих последних редакциях. Например, большая часть критики Propel, по-видимому, сосредоточена вокруг классов «ModelName Peer », которые в любом случае устарели в 1.5.
Вот что я накопил до сих пор (и я попытался сделать этот список максимально сбалансированным ...):
- Propel
- Pros
- Чрезвычайно дружественный IDE, потому что фактический код генерируется, а не полагаться на магические методы PHP. Это означает, что такие функции IDE, как завершение кода , действительно полезны.
- Быстро (с точки зрения использования базы данных - во время выполнения не выполняется самоанализ базы данных)
- Чистая миграция между версиями схемы (по крайней мере, в бета-версии 1.6)
- Может генерировать модели PHP 5.3 (то есть пространства имен)
- Легко объединить множество вещей в один запрос к базе данных с помощью таких
useXxx
методов, как методы. (См. Видео «Завершение кода» выше)
- Cons
- Требуется дополнительный шаг сборки, а именно построение классов моделей.
- Сгенерированный код необходимо перестраивать всякий раз, когда изменяется версия Propel, изменяется настройка или изменяется схема.
Для некоторых это может быть неочевидным, и пользовательские методы, применяемые к модели, теряются. (Думаю?)- не правда; пользовательские методы не теряются, потому что сгенерированный класс является базовым классом; Propel предоставляет класс сущностей специально для расширения. - Некоторые полезные функции (например, поведение версии, миграция схемы) находятся в бета-состоянии.
- Pros
- доктрина
- Pros
- Более популярным
- Doctrine Query Language может выражать потенциально более сложные отношения между данными, чем это легко сделать с помощью стратегии Propel ActiveRecord.
- Проще добавить многоразовое поведение по сравнению с Propel.
- Комментирование на основе DocBlock для построения схемы встроено в реальный PHP, а не в отдельный XML-файл.
- Повсеместно использует пространства имен PHP 5.3
- Cons
- Требуется изучение совершенно нового языка программирования (Doctrine Query Language)
- Реализовано в терминах «магических методов» в нескольких местах, что делает автозаполнение IDE бесполезным.
- Требует самоанализ базы данных и, следовательно, немного медленнее, чем Propel по умолчанию; кэширование может устранить это, но кэширование добавляет значительную сложность.
- Меньше поведения включены в базовую кодовую базу. Несколько функций, которые Propel предоставляет «из коробки» (например, «Вложенный набор»), доступны только через расширения.
- ОЧЕНЬ ОГРОМНОЕ :)
- Pros
Это я почерпнул только благодаря чтению документации, доступной обоим инструментам - на самом деле я еще ничего не создал.
Я хотел бы услышать от тех, кто использовал оба инструмента, чтобы поделиться своим опытом о плюсах и минусах каждой библиотеки, и каковы их рекомендации на данный момент :)