Должен ли я использовать сопоставление YAML/XML или аннотации в Doctrine 2?

Я использую Doctrine 2 как ORM в рамках Symfony. Используя сопоставление на основе аннотаций для сущностей, мне пришлось бы писать много кода (сеттеры и геттеры, картографическую информацию и т.д.). Используя YAML/XML, мне больше не нужно писать только определение столбца и метаданные. В документации Doctrine они используют в основном аннотации в примере с небольшим использованием YAML или XML.

Должен ли я использовать YAML/XML или аннотации?

Для аннотаций я могу найти документацию для каждой аннотации в http://docs.doctrine-project.org/en/latest/reference/annotations-reference.html. Однако я не мог найти эквиваленты аннотации в YAML или XML; как преобразовать аннотации в эквивалентные выражения YAML/XML?

Ответ 1

В основном это зависит от предпочтений.

Это мой взгляд на вещи:

Плюсы аннотаций:

  • легче работать, поскольку они близки к тому, что они описывают (свойства)
  • много примеров используют их, как вы уже заметили

Плюсы yaml/xml

  • это сохраняет объекты домена чистыми, поэтому абсолютно ничего из уровня персистентности не протекает в домен (даже если в форме комментария)

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

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

Относительно этого: "Мне нужно было бы написать много кода, сеттеров и геттеров, картографическую информацию":

Doctrine требует конфиденциальных/защищенных свойств, поэтому вы все равно будете писать геттеры и сеттеры. И вы все равно будете писать информацию о карте, как раз в другом месте.

Лично я бы пошел с аннотациями, так как гораздо проще найти примеры и информацию, если они вам понадобятся.

Ответ 2

Существует один недостаток использования аннотаций. Поскольку они определены в комментариях (что странно), вы не сможете использовать прекомпиляторы (например, Zend Guard) или некоторые расширения кэширования php для байт-кода, чтобы повысить производительность вашего кода ( некоторые из них Комментарии). Поскольку аннотация является единственной спецификацией с этим техническим недостатком, я бы НЕ рекомендовал ее использовать.

Кроме того, писать "функциональный" материал в комментариях просто странно.

XML гораздо более подробный, чем YAML, но также более широко известен. Примеры документации для XML - самые бедные среди всех вариантов.

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

Я лично предпочитаю YAML. Я могу автоматически генерировать объекты с помощью инструментов схемы доктрины (что означает, что мне не нужно писать геттеры/сеттеры). Я также могу использовать опции кэша precompilers/bytecode там, не беспокоясь о том, что мои комментарии отключены.


Дополнительная информация:

Если вы используете PHP 7.0 или выше, вы никогда не сможете установить opcache.save_comments = 0 на php.ini, если используете аннотации. PHP имеет собственный способ обрезать комментарии, которые будут BREAK ваше приложение. Гильерме Бланко, один из самых активных поддерживающих доктрины, и парень, который разработал классы поиска аннотаций, которые используются большинством проектов (Doctrine, Symfony) высказался против комментария аннотации (если вы прочитаете всю тему, вы увидите, что он очень увлечен этим). Также было несколько подробное обсуждение вопросов с комментариями комментариев к Reddit, и большинство людей, похоже, согласились с этим плохой идеей.

Несмотря на все это, официальные рекомендации лучших специалистов Symfony советуют людям использовать аннотации. Таким образом, большинство пакетов Symfony, вероятно, будут использовать аннотации в качестве формата метаданных.

Ответ 3

Я думаю, что это вопрос собственного вкуса, я предпочитаю аннотации.

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

Лучший способ понять это, чтобы создать оба случая. Затем вы посмотрите, что предпочитаете.