Чи слід вибирати доктрину 2 або Propel 1.5 / 1.6, і чому? [зачинено]


30

Мені хотілося б почути від тих, хто використовував Вчення 2 (або пізнішого) та Пропель 1.5 (або пізніші). Більшість порівнянь між цими двома об'єктними реляційними картографами базуються на старих версіях - "Доктрина 1 проти Propel 1.3 / 1.4", і обидва ORM пройшли значні зміни в останніх редакціях. Наприклад, більша частина критики Propel, здається, зосереджується навколо класів "ModelName Peer ", які в будь-якому випадку застаріли в 1,5.

Ось що я накопичив до цього часу (і я намагався зробити цей список максимально збалансованим ...):

  • Привід
    • Плюси
      • Надзвичайно сприятливий для IDE, оскільки генерується фактичний код, а не покладається на магічні методи PHP. Це означає, що такі функції IDE, як завершення коду , справді корисні.
      • Швидкий (З точки зору використання бази даних - в базі даних не робиться самоаналіз виконання)
      • Чиста міграція між версіями схеми (принаймні, у бета-версії 1.6)
      • Може генерувати моделі PHP 5.3 (тобто простори імен)
      • Легко пов’язувати багато речей в єдиний запит до бази даних з такими речами, як useXxxметоди. (Дивіться відео "Доповнення коду" вище)
    • Мінуси
      • Потрібен додатковий крок побудови, а саме побудова класів моделей.
      • Генерований код потребує відновлення кожного разу, коли змінюється версія Propel, змінюється налаштування або змінюється схема. Це може бути неінтуїтивним для деяких, і користувацькі методи, застосовані до моделі, втрачаються. (Я думаю?) - Неправда; спеціальні методи не втрачаються, оскільки створений клас є базовим класом; Propel забезпечує клас сутності, спеціально для розширення.
      • Деякі корисні функції (наприклад, поведінка версій, міграція схем) знаходяться в бета-стані.
  • Вчення
    • Плюси
      • Більш популярні
      • Мова запитів доктрини може виражати потенційно складніші зв’язки між даними, ніж це легко можливо за допомогою стратегії ActiveRecord Propel.
      • Простіше додавати поведінку для багаторазового використання в порівнянні з Propel.
      • Коментування на основі DocBlock побудови схеми вбудовується у фактичний PHP замість окремого XML-файлу.
      • Використовує PHP 5.3 простори імен скрізь
    • Мінуси
      • Вимагає вивчення абсолютно нової мови програмування (Мова запиту вчення)
      • Впроваджені з точки зору "магічних методів" у кількох місцях, роблячи автозаповнення IDE нікчемним.
      • Потрібна інтроспекція бази даних і, таким чином, дещо повільніше, ніж Propel, за замовчуванням; кешування може видалити це, але кешування додає значної складності.
      • Менше поведінки включено до основної бази коду. Кілька можливостей, які пропонується Propel поза коробкою (наприклад, Вкладений набір), доступні лише через розширення.
      • Freakin 'ОГРОМНО :)

Це я зрозумів, хоча лише читаючи документацію, доступну для обох інструментів - я ще нічого не створив.

Хотілося б почути від тих, хто використовував обидва інструменти, поділитися своїм досвідом щодо плюсів / мінусів кожної бібліотеки та про те, що їх рекомендація на даний момент :)


Про яку версію доктрини ви говорите? v2 і v1.2 - полюси одна від одної.
Включення

1
@Orbling: Ви читали заголовок чи основу питання? Прочитайте їх ще раз :)
Біллі ONeal

@Billy ONeal: Добре. У Doctrine2 поведінка повністю повністю вилучена з Core, тому я подумав, що ви, натомість, говорите про v1.2.
Увімкнення

@Orbling: Ах, це має сенс. З іншого боку, він забезпечує еквіваленти "поведінці" - це просто не називає їх.
Біллі ONeal

@Billy ONeal: Насправді це не так, ви можете самостійно їх реалізувати, або ви можете отримати додаткові додатки. Але це не так, як Доктрина1 чи Пропель.
Орлінг

Відповіді:


15

Не дивлячись на сучасну тенденцію рекомендувати доктрину, мені потрібно сказати інакше. Майте на увазі, що також мої особисті переваги орієнтовані на мої особисті переживання, але як сказав @Dan, вони обидва дуже потужні.

Мені не подобається доктрина з кількох причин, про які ви заявляли раніше, як розмір і цілі магічні методи - це те, що зі мною перериваються . Отже, я використовую Propel , чому? головним чином тому , що це простота, і тому , що простий в розробці програмного забезпечення є хорошим . Моя особиста віра в те, що жадібні дизайни - це погано.

Використовуючи Propel, мені вдалося реалізувати шаблон сховища для моїх власних систем, і це працює дуже добре, не кажучи вже про продуктивність Propel, яка є однією з найшвидших ORM, яку я бачив.

Отже, моя основна відповідь - Propel , оскільки вона забезпечує гарне програмне забезпечення з меншим кодом і воно дає можливість IDE надати вам хороший інтелісцент, не втрачаючи точки програмного забезпечення ORM, яке підключається до бази даних і робить це приємно ...

Сподіваюся, я можу допомогти


Я використовував Доктрину протягом року. Я спробував Kohana, Laravel Eloquent, мені подобаються їхні публічні сфери, тому що я дуже ненавиджу геттерів та сетерів (я вважаю за краще власником доступу: P). Після того, як я побачив слово «IDE friendly» у Propel, я вирішив спробувати Propel сьогодні ввечері.
Zorji

11

Ваша інформація про Доктрину 2 неправильна ...

  • DQL в значній мірі SQL, тому не багато чого вчитися.
  • Доктрина 2 не використовує жодної «магії» (лише те, що ви очікували в будь-якій сучасній бібліотеці PHP).
  • Доктрина 2 не робить самоаналіз баз даних ... відображення зберігається у ваших об'єктах / файлах відображення, і передбачається, що ваша база даних відповідатиме цьому.
  • Кешування навряд чи "значна складність".
  • У Доктрині 2 немає «поведінки» поза рамками

Я раніше не використовував Propel, але Doctrine 2 набагато новіший і має дійсно високу якість кодової бази. Але схоже, що Propel використовує Active Record, в Doctrine 2 використовується шаблон Data Mapper.

Недоліком того, що доктрина 2 є новішою, є відсутність сторонніх прикладів, але вона швидко розвивається.

Я рекомендую доктрину 2 ...


Якщо ви раніше не використовували Propel, я не маю іншого вибору, окрім як спростувати це через те, що я FUD. Щодо коментаря "Магії", я маю на увазі те, що він заснований на магічних методах PHP, таких як __getі __set(що правда), а не реальних методах.
Біллі ONeal

1
Добре за голос "за", але де "Доктрина 2" використовує магічні методи? Окрім методів знаходження * DocumentRepository * (__call), але це не проблема, тому що це просто приємніший спосіб запиту ... ви завжди втратите автоматичне завершення IDE. Якщо ви хочете ActiveRecord, використовуйте Propel. Якщо ви хочете Data Mapper, використовуйте доктрину 2.
Cobby

2
Propel не вводить базу даних в процесі виконання завдяки генерації коду.
Вільям Дюран

Пункт №1 кулі не зовсім коректний, DQL не дуже «схожий на SQL». DQL залежить від того, що ви посилаєтесь на об'єкти моделей, про які має знати Доктрина, і є деякі ускладнення, якщо необхідні більш складні об'єднання.
Майк Перселл

2
DQL - це діалект SQL, як це не робить його "в значній мірі", як SQL? Так, семантика мови дещо інша (об'єкти проти таблиць), але в кінцевому підсумку DQL - це мова для запиту структурованих даних - яка щойно була представлена ​​як об'єкти, а не таблиці - ака SQL.
Коббі

3

З ваших коментарів звучить так, ніби ви намагаєтесь вибрати Propel або Doctrine для заміни або задоволення вашої потреби в ORM у застарілому додатку.

Зважаючи на це, я думаю, що важливо не втрачати з уваги той факт, що перехід до будь-якого з них може стати великим вдосконаленням вашої заявки. Отже, реальної неправильної відповіді немає.

Тому рішення, яке ви обираєте, значною мірою залежить від ваших уподобань, виходячи з ваших відповідей на наступні питання:

  1. Який найкраще інтегрується у ваше поточне рішення?
  2. Який API ви віддаєте перевагу?
  3. У кого б ви хотіли внести свій внесок? (виправлення, документація, звіти про помилки тощо)

Особисто я рекомендував би доктрину 2, оскільки це громада, документація та архітектура.


1
Я шукаю тут порівняння між ними. (Чому саме я хотів би внести свій внесок у справу? Я не хочу сприяти жодному з них - я хочу користуватися бібліотекою, а не писати її;;)). Ви говорите, що у Доктрини 2 є хороша спільнота, документи та архітектура - архітектурно, так, це DataMapper. Документи мудрі Я не впевнений, що згоден - обидва проекти, здається, мають хороші документи. Я мало бачив спільноти, яка використовує будь-яку систему. Чи хотіли б ви детальніше розібратися, що ви маєте на увазі під цими речами?
Біллі ONeal

2
Ой вам подобається доктрина доктрина? Ви читали пропель? І так, спільнота Доктрин приємно, але подивіться на сховище ODM, багато PR-репутацій навіть не коментуються, не об'єднуються і не відкидаються ... Подивіться на часовий графік Propel, спільнота дійсно активна;)
Вільям Дюран

3

Я рекомендую вам Propel, оскільки він добре інтегрований, швидкий та потужний. Генерувати код краще, ніж завантажувати класи під час виконання, воно полегшує кроки налагодження і показує, що ви створили. Тож крок збирання не є проблемою.

У Doctrine2 немає офіційного поведінки, а модель дизайну DataMapper - це круто, але важко використовувати у реальному житті. О, і DQL - це біль, але мова, яка перебуває на засадах, вивчати ...

Якщо ви хочете думати з об'єктами (без DQL / SQL / будь-яким іншим), виберіть «Пропел».

Doctrine2 є частиною Symfony2 де-факто, але все зміниться дуже скоро, подивіться останню статтю Фабієна Потенцьє.

Ура, Вільям


, я почав з Propel 2 роки тому з symfony1. Потім довелося перейти на Doctrine2 для symfony2. Раді повернутися до Propel.Cheers!
Бхану Крішнан

2

Вони обоє дуже хороші. Є деякі крайові випадки, коли можна щось зробити чи зробити щось краще, ніж інший. Де б я не стикався з будь-якими проблемами, це було більше через мою відсутність знань, ніж те, що вони не могли зробити.

Це означає, що документація та підтримка важливіша, ніж властивість коду. Чи знаєте ви когось, хто може допомогти вам, коли у вас виникнуть проблеми? Наскільки добре ви ставитесь із документацією? Чи один із них просто "відчуває" себе природніше?


2

Я вибрав Propel 1.63 для великого застарілого додатка mysql (200 таблиць або близько того) - тут включені фактори: підтримка IDE, яка дозволяє новим розробникам легко знайти шлях із заповненням коду; підтримка схем перехресних баз даних, продуктивність; краща підтримка переживань та використання декількох форм поведінки. Насправді я почав з Doctrine, оскільки це найкраще підтримувало Symfony2, але як тільки Propel значно покращив їх підтримку з Symfony (наступною платформою, до якої я згодом перейду), я перейшов через краще вирішення вищезазначених питань. Ніяк не шкодуйте пропель є вирішальним переможцем.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.