Doctrine2 - аннотации против yml / xml - PullRequest
15 голосов
/ 09 августа 2011

Что является плюсом аннотации для описания сущности в Doctrine2?

В Doctrine1 & Propel (который я использовал много раз) реверс-инжиниринг базы данных для создания yml или xml, затем генерация модели - очень быстрый рабочий процесс.

В Doctrine2, выбирая аннотации, нужно написать большое количество кода котельной плиты только для того, чтобы объекты были на месте ..; тем не менее, аннотации кажутся «подходящим».

Чего мне не хватает?

Ответы [ 2 ]

29 голосов
/ 10 августа 2011

Рабочий процесс, который вы описываете в D1 и Propel, совершенно противоположен предпочтительному образу мышления для Doctrine2. Фактически, я также избегал писать свои собственные определения базы данных в D1, по большей части по тем же причинам, которые я привожу здесь:

В Доктрине 2 вы в первую очередь касаетесь своих сущностей. Сущности - это просто обычный объект PHP, а доктрина просто управляет вашим постоянством. Тот факт, что Doctrine скрытно скрывает данные в какой-то базе данных, является запоздалой мыслью. Весь этот беспорядок именно то, что вы должны абстрагировать! Теоретически, вы можете избавиться от доктрины в будущем и написать собственную логику настойчивости. Ваши сущности будут работать так же, как и всегда.

Глядя на это так, начинать со схемы базы данных совершенно глупо. Вы больше интересуетесь своими сущностями и бизнес-логикой, встроенной в них и вокруг них. Это вкусный суп!

Теперь, так как вы используете доктрину для сохранения ваших сущностей, (вероятно) имеет смысл сохранить ваши данные отображения прямо там с определениями классов.

Итак, ваш новый рабочий процесс:

  1. Проектируйте некоторые сущности, определяя некоторые простые классы PHP.
  2. Пометьте определения классов некоторыми причудливыми комментариями к доктрине. жевать.
  3. ./doctrine orm:schema:create и пусть доктрина беспокоится о определения таблиц базы данных.

Теперь, если у вас есть какая-то устаревшая база данных, все становится сложнее и намного менее увлекательным. Я действительно не имел дело с этим сценарием с D2, но я думаю, что это уродливо.

Относительно кода Boilerplate: Я вижу, что люди жалуются на необходимость писать геттеры / сеттеры для своих сущностей. Я делаю нечто подобное , что делает этот парень - все мои сущности расширяют класс AbstractEntity, который использует магические методы для генерации методов получения / установки для любых свойств, которые не имеют ручной работы. Как только вы это сделаете, практически не будет котла.

В качестве альтернативы, в наши дни существует множество инструментов, которые будут штамповать шаблон для вас (PHPStorm делает это, плагины для Sublime и т. Д.). Это делает стандартную процедуру довольно безболезненной и дает дополнительное преимущество, заключающееся в том, что вы можете добавлять подсказки типа, а ваш редактор может обеспечить полезное автозаполнение.

10 голосов
/ 09 августа 2011

Основная причина, по которой я использую аннотации для yml или xml, заключается в простоте настройки. Мне не нужно искать в другом файле, чтобы запомнить (например), что я установил имя таблицы соединения, как в отношении ManyToMany. И если я что-то изменяю в доменном объекте (что часто случается на ранних этапах моего процесса разработки), мне не нужно забывать обновлять и другой конфигурационный файл.

Однако, как вы сказали, схема базы данных легче переносится на один из других форматов конфигурации, поэтому в подобных ситуациях вам действительно может быть лучше использовать yml или xml вместо аннотаций. В конечном итоге все сводится к личным предпочтениям ... используйте то, что вам больше всего удобно.

...