Я хотел бы услышать от тех, кто использовал 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
Это я почерпнул только благодаря чтению документации, доступной обоим инструментам - на самом деле я еще ничего не создал.
Я хотел бы услышать от тех, кто использовал оба инструмента, чтобы поделиться своим опытом о плюсах и минусах каждой библиотеки, и каковы их рекомендации на данный момент :)
Ответы:
Несмотря на текущую тенденцию рекомендовать Доктрину, я должен сказать иначе. Имейте в виду, что мои личные предпочтения также ориентированы на мой личный опыт, но, как сказал @Dan, оба они очень сильны.
Мне не нравится Doctrine по нескольким причинам, которые вы указали ранее, например, размер и целые магические методы - вот что мешает мне заключить сделку . Итак, я использую Propel , почему? главным образом потому, что это просто, и потому что просто в разработке программного обеспечения - это хорошо . Мое личное убеждение в том, что жадность с дизайном это плохо.
Используя Propel, мне удалось реализовать реализацию шаблона репозитория для моих собственных систем, и она работает очень хорошо, не говоря уже о производительности Propel, который является одним из самых быстрых ORM, которые я видел.
Итак, мой основной ответ - Propel , потому что он позволяет создавать хорошее программное обеспечение с меньшим количеством кода и дает возможность IDE предоставлять вам хороший intellisense, не теряя смысла программного обеспечения ORM, которое подключается к базе данных и делает это хорошо ...
Надеюсь я смогу помочь
источник
Ваша информация о Доктрине 2 неверна ...
Я не использовал Propel раньше, но Doctrine 2 намного новее и имеет действительно высококачественную кодовую базу. Но похоже, что Propel использует Active Record, Doctrine 2 использует шаблон Data Mapper.
Недостатком Doctrine 2 является отсутствие сторонних примеров, но он быстро накапливается.
Я рекомендую Доктрину 2 ...
источник
__get
и__set
(что верно), а не на реальных методах.Судя по вашим комментариям, вы пытаетесь выбрать Propel или Doctrine для замены или удовлетворения ваших потребностей в ORM в унаследованном приложении.
При этом, я думаю, важно не упускать из виду тот факт, что переход на любой из них может быть большим улучшением для вашего приложения. Таким образом, нет реального неправильного ответа.
Поэтому решение, которое вы выбираете, в значительной степени зависит от ваших предпочтений, основываясь на ваших ответах на следующие вопросы:
Лично я бы порекомендовал Doctrine 2 из-за его сообщества, документации и архитектуры.
источник
Я рекомендую вам Propel, потому что он хорошо интегрирован, быстрый и мощный. Генерировать код лучше, чем загружать классы во время выполнения, он облегчает этапы отладки и показывает, что вы создали. Таким образом, шаг сборки не является проблемой.
Doctrine2 не имеет официального поведения, а шаблон проектирования DataMapper - это круто, но его трудно использовать в реальной жизни. Да, и DQL - это боль, но язык для изучения еще хуже ...
Если вы хотите думать с объектами (без DQL / SQL / что угодно), выберите Propel.
Doctrine2 является частью Symfony2 де-факто, но все будет очень скоро, посмотрите последнюю статью Fabien Potencier.
Ура, Уильям
источник
Они оба очень хороши. Есть некоторые крайние случаи, когда один может сделать что-то или сделать что-то лучше, чем другой. Везде, где у меня возникали проблемы, это было связано скорее с недостатком знаний, чем с тем, что они не могли сделать.
Это означает, что документация и поддержка важнее внутренних возможностей кода. Знаете ли вы кого-нибудь, кто может помочь вам, когда вы столкнетесь с проблемами? Насколько хорошо вы справляетесь с документацией? Кто-то из них просто чувствует себя более естественно для вас?
источник
Я выбрал Propel 1.63 для большого унаследованного приложения mysql (200 таблиц или около того) - здесь учитывались следующие факторы: поддержка IDE, позволяющая новым разработчикам легко находить свой путь с дополнением кода; поддержка кросс-схем, производительность; лучшая встроенная поддержка перечислений и использование нескольких поведений. На самом деле я начал с Doctrine, так как он был лучше всего поддержан Symfony2, но как только Propel значительно улучшил их поддержку с Symfony (следующая платформа, на которую я в конечном итоге перейду), я переключился из-за лучшей обработки вышеуказанных проблем. Никаких сожалений. Propel - решающий победитель.
источник