РНР платформы: учение и движение


Я начинаю новый проект с symfony который легко интегрируется с доктрина и Propel, но мне конечно нужно сделать выбор.... Мне было интересно, есть ли у более опытных людей общие плюсы и/или минусы для работы с любым из этих двух?

Спасибо большое.

EDIT: Спасибо за все ответы, полезные вещи. Нет действительно правильного ответа на этот вопрос, поэтому я просто Марк ас одобрил тот, который получил самые популярные голоса.

10 123

10 ответов:

Я бы пошел с учением. Мне кажется, что это гораздо более активный проект и, будучи по умолчанию ORM для symfony, он лучше поддерживается (хотя официально ORM считаются равными).

кроме того, мне больше нравится, как вы работаете с запросами (DQL вместо критериев):

<?php
// Propel
$c = new Criteria();
$c->add(ExamplePeer::ID, 20);
$items = ExamplePeer::doSelectJoinFoobar($c);

// Doctrine
$items = Doctrine_Query::create()
       ->from('Example e')
       ->leftJoin('e.Foobar')
       ->where('e.id = ?', 20)
       ->execute();
?>

(реализация доктрины гораздо более интуитивна для меня).

Я думаю, что это страница из документации доктрины стоит прочитать: http://www.doctrine-project.org/documentation/manual/1_2/en/introduction:doctrine-explained

я предвзят, так как я немного помогаю в следующем выпуске Propel, но вы должны учитывать, что Propel действительно был первым доступным ORM, затем немного отстал, когда доктрина была создана, но теперь снова активно развивается. Symfony 1.3 / 1.4 поставляется с Propel 1.4, где большинство сравнений останавливается на Propel 1.3. Кроме того, Следующий выпуск Propel (1.5) будет содержать много улучшений, особенно в создании ваших критериев (что приведет к меньшему количеству кода для вас).

I как и Propel, потому что он кажется менее сложным, чем Doctrine: большинство кода находится в нескольких сгенерированных классах, тогда как Doctrine разделил функциональность на множество классов. Мне нравится хорошо понимать библиотеки, которые я использую (не слишком много "магии"), но, конечно, у меня больше опыта с Propel, поэтому, возможно, доктрина не так сложна за кулисами. Некоторые говорят, что Propel быстрее, но вы должны проверить это для себя, и рассмотреть, перевешивает ли это других различия.

возможно, Вам также следует рассмотреть вопрос о наличии плагинов Symfony для разных фреймворков. Я считаю, что Propel имеет преимущество здесь, но я не знаю, сколько из перечисленных плагинов все еще актуальны с последней версией Symfony.

это сводится к личным предпочтениям. Я использую Propel, потому что (среди прочего) мне нравится тот факт, что все имеет свой собственный конкретный метод getter & setter. В доктрине это не так.

Propel:

$person->setName('Derek');
echo $person->getName();

доктрина:

$person->name = 'Derek';
echo $person->name;

причина, по которой мне нравится иметь геттеры и сеттеры, заключается в том, что я могу поместить в них все виды логики, если мне нужно. Но это только мои личные предпочтения.

Я должен также добавить, что, хотя движение было медленно двигаясь в прошлом, сейчас он снова находится в активном развитии. За последние несколько месяцев он выпустил несколько новых версий. Самая последняя версия Propel включает в себя "свободный интерфейс запроса" похож на доктрину, так что вам больше не нужно использовать критерии, если вы не хотите.

стоит отметить доктрина 2 и В настоящее время в развитииосвобожден [ed] и функции почти полностью отличаются от текущей стабильной версии доктрины 1. Он полагается на шаблон сопоставления данных вместо активной записи и использует "диспетчер сущностей" для обработки логики сохранения. Когда он будет выпущен, он будет иметь более близкое сходство с Hibernate Java (доктрина 1 больше похожа на ActiveRecord Rails).

Я развивается с Альфа-релизом доктрины 2, и должен сказать, что это на голову выше доктрины 1 (только мое мнение, и я никогда не использовал Propel). Велика вероятность, что сообщество доктрин будет двигаться к нему, когда оно будет выпущено.

Я бы рекомендовал вам проверить доктрину, но если вы предпочитаете активный стиль записи, который Propel и Doctrine используют сейчас, вы можете просто придерживаться Propel.

две ссылки немного устаревшие, так что вы, тем не менее, рассмотрим некоторые общие положения, в основном вам придется оценить ваш опыт работы с База как таковая, а главный недостаток доктрины является невозможность иметь IDE, который позволяет автоматически код в том, что движение является победителем, кривые обучения propel и Doctrine очень разные, легче продвинуть, если ваш проект будет нужен для управления сложными данными модель использует доктрины, если вы хотите быстро работать с ORM, который является лучшим документировано и найти больше поддержки в Propel интернет использует, гораздо более зрелым, и я считаю, что наиболее часто используется.

http://propel.posterous.com/propel-141-is-out

Я бы предложил использовать propel 1.6, который лучше подходит для функции автозаполнения IDE.

Я не пользователь PHP 5 non-framework ORM, но вот несколько хороших сравнительных сообщений (если вы их еще не видели):

http://codeutopia.net/blog/2009/05/16/doctrine-vs-propel-2009-update/

http://trac.symfony-project.org/wiki/ComparingPropelAndDoctrine

оба конуса фаворит к доктрине как новое поколение ORM для Symfony.

Я бы предложил использовать Плагин DbFinder. Это на самом деле очень мощный плагин, который поддерживает обе, и довольно хороший. Мне нравится использовать его лучше, чем кто-либо.

после использования обоих из них в течение нескольких лет я предпочитаю Propel 2 доктрине просто на основе того, как вы строите свою логику запросов. Доктрина настолько глубока, насколько она может получить, и управление многими ее аспектами соответствует этому уровню глубины. Propel I feel имеет более гибкий и объектно-ориентированный Способ построения и управления взаимодействиями запросов.

для меня это привело к меньшему количеству кода в модели и большему количеству структур вокруг того, как логика может/будет обработана. Это вылилось в строительство много взаимодействий как общая функциональность. (В конце концов, 90% того, что вы будете делать с базой данных, просто будет какой-то степенью работы с crud.)

в конце концов, оба являются мощными, управляемыми и выполнят свою работу. Мои личные проекты и интересы используют Propel ORM 2 и будущие проекты, если они все еще написаны на PHP, пойдут по этому маршруту.

Я использую на ежедневной основе в течение последних 3-4 лет.

Если я не ошибаюсь, оба ORMs используют схему на основе XML, и создание этих определений схемы довольно громоздко. Если вам нужна простая схема на основе PHP с плавным стилем. Вы можете попробовать LazyRecord https://github.com/c9s/LazyRecord он поддерживает автоматическую миграцию и обновление/понижение генераторов сценариев. И все файлы классов генерируются статически без затрат времени выполнения.