PHP Doctrine и большие проекты

…и еще немного о работе :)

Опробовав Doctrine на двух довольно больших проектах (они еще не закончены слава богу), могу сделать следующие выводы (ИМО):

  • считать что этот ORM реализует бизнес-логику - глупо
  • автор Doctrine разрабатывал продукт под нужды небольших проектов и команд
  • описывать таблицы из кода - очень неудобно
  • …так же как и связи
  • поднять оценку до 3 из 5 для Doctrine можно было бы реализовав setter’ы и getter’ы защищенными
  • …и связи между таблицами тоже
  • LSB очень не хватает :(

Tags: , , , , ,

Также рекомендую к прочтению:

6 Responses to “PHP Doctrine и большие проекты”

  1. Сергей Says:

    Алексей, а ты случаем Propel не пробовал? Интересно твоё мнение по этому поводу.

  2. Алексей Токарь Says:

    К сожалению не довелось, так как Propel был отброшен еще на стадии анализа требований и возможностей… Основными минусами были низкая производительность и недостаточное качество кода (и синтаксис в том числе)

    Дополнительно хотел бы еще сказать что хоть Propel более функциональный, но тем не менее уже Doctrine более чем достаточно. Я бы даже сказал - чересчур. Вместо расширяемость в ширь, я бы, на месте автора, расширялся вглубь (а багов-то и просто мест для рефакторинга реально хватает)

  3. chiffa Says:

    А хвалил-то, хвалил… Есть два больших и интересных промышленных подхода для реализации ORM:
    - описываешь бизнес-объектов (БО), структуру БД и связи БО с таблицами. Запускаешь генератор и он тебе строгает по каждому БО класс модели с описанием API БО. В итоге имеешь большие и толстые классы, которые наследуешь, с не всегда оптимизированной логикой, которую ты поправить не можешь. Потому что следующая правка схемы -> перегенерация восстановит базовый класс.

    - описываешь бизнес-объектов (БО), структуру БД и связи БО с таблицами. движок генерирует рантайм классы, кеширует и ты работаешь с ними через интерфейс, который виртуализирует вызовы. Тупая логика компенсируется руцями-прописанным маппингом и кусками SQL (в схеме).

    Первый подход есть для РНР (Propel, Doctrine), но по сравнению с тем же вылизанным hybernate для джавы - он тупо сосет, как младенец сиську.

    Второго - нет :)

    Все эти подходы ростут от ленивости писать заточенные классы сразу руками. Так что всегда в данный момент времени тебе просто надо искать баланс между сырым но типа крутым подходом и ручной работой.

    Кстати думаю если спортировать hybernate или ibatis sqlmap на РНР, пых-пых будет большую часть ресурсов и времени тупо тратить на их логику. Язык все-таки легковесный, не тягаться ему с джавой по мощностям.

  4. ggeeek Says:

    Помоему Doctrine очень стОящая штука. Генератор таблиц и связей из yaml очень удобен и в то же самое время конфиг не морозит глаза как какой-нибудь xml-ый. По поводу “реализации бизнес-логики” - это с каких это пор ORM должна реализовывать бизнес-логику???? :)
    Doctrine всегда был и будет более функциональным чем Propel.

    Если портировать Hibernate на PHP то он явно не будет ввидел PHP кода, а только как расширение (dll).

    Вообще “выставляя баллы” неплохо бы их подкреплять какими-либо доказательствами :)

  5. standov Says:

    > Основными минусами были низкая производительность и недостаточное качество кода (и синтаксис в том числе) - o Propel

    Есть подозрение что вы пробовали 1.2, попробуйте 1.3, на рельных задачах он быстрее в 1,5 - 2 раза чем Доктрин, в т.ч. за счет очень мощного пула объектов, гараздо меньшему расходу памяти, более простой архитектуре (в частности инстансы не тягают за собой описание модели - отсутствие циклических ссылок), действительных багов уже давно не находится - елинственное исключение - поддержка нестед-сет, она простая (правда не проще чем в доктрин ;)).

    Вообще, в реальном проекте командой поработали с доктрин 3 месяца, устав бороться с багами, диким расходом памяти и не соответствием документации реальному API была (у меня) задача оценить новый пропел - r слову юзал его с беты на своих проектах, показал реальные преимущества, через 2 дня порта проблем больше не имели.

  6. standov Says:

    дополнение (не поместилось)
    Doctrine сырой и тяжелый продукт с перегруженным API, Propel готовый, отточенный и легковесный с единственным недостатком - длительное вхождение.

Leave a Reply

Введите следующие символы: