Вопрос

Только что наткнулся на Доктрина Проект, который имеет реляционный карт объекта и слой абстракции DB. Что не дает доктрины, что другие слои абстракции PHP не делают? И какое практическое использование вы можете поставить ORM, кроме получения объектов через запросы, написанные на языке доктрины? Действительно ли язык запросов, в котором вы хотите разработать все веб -приложение? Это хорошо работает?

В целом создание приложения на доктрине облегчает поддержание и понимание? Это чрезмерно инженерно и накапливается на уровне абстракции, разумный для проектов размером с малого среднего? (<50 экранов графического интерфейса), в отличие от непосредственной работы с MySQL.

Это было полезно?

Решение

Что не дает доктрины, что другие слои абстракции PHP не делают?

  1. Реализует шаблон Datamapper, а не Activerecord.
  2. Поддержка аннотации, XML и YAML для схемы.
  3. Использование DQL.
  4. Использует преимущества Php 5,3+.
  5. Быстро и имеет большое сообщество.
  6. За исключением ORM есть ODM.

Действительно ли язык запросов, в котором вы хотите разработать все веб -приложение?

Только часть заявки, ответственного за поддержание бизнес-объектов, должна знать о существовании доктрины. И эта часть не должна быть на 100% на основе доктрины.

В целом создание приложения на доктрине облегчает поддержание и понимание?

Определенно. Код легче читать, понимать и поддерживать.

Это чрезмерно инженерно, и разумно ли это для проектов по размеру малого среднего размера?

На самом деле доктрина довольно проста в своих основах. И это очень хороший выбор для маленьких, средних и даже некоторых больших приложений.


Доктрина не является ответом на все, а иногда это немного проблематично. Однако для типичных задач это чрезвычайно полезно. ИМХО лучший ORM/ODM для PHP в этот момент.

Другие советы

Я хотел бы добавить несколько моментов к ответу Крозина, но, к сожалению, не могу прокомментировать это. Они здесь:

  • Доктрина не использует магические методы __get () и __set () для доступа к атрибутам объекта, все атрибуты объекта должны иметь getter / setter. Это улучшает завершение кода IDE, и вам не нужно постоянно смотреть на структуру таблицы БД.
  • Доктрина полностью отвлекает вас от реальных имен поля таблиц. Как только вы нанесли на карту свойства объекта в поля DB - вы используете имена свойств повсюду. То же самое для имен таблиц.
  • Доктрина использует шаблон репозитория, который скрывает детали получения сущностей.
  • Доктрина использует подход «код сначала», поэтому вы можете сначала создавать объекты, а затем автоматически генерировать базу данных для них. Обратный корпус также возможен.
  • Доктрина имеет мощный строитель запросов, поэтому вы можете использовать шаблон строителя для запросов с условными частями.
  • Доктрина использует иностранные ключи и ограничения для выполнения каскадных действий и поддержания данных.
  • Unitoroftion доктрины - довольно отличная и умная вещь, которая не имеет аналогов в других PHP Orms

IMHO На данный момент доктрина обеспечивает лучшую поддержку завершения кода IDE и абстракцию уровня DB среди всех доступных PHP ORM. Это не чрезмерно инженерно и следует солидным принципам.

Я хотел бы добавить точку к ответу Геркирилла. Отсутствие поддержки методов геттера/сеттера магии - это слабость, а не сила. Если вы когда -нибудь прокручивали десятки страниц идентичных Getters/Setters, вы поймете, что эти методы являются огромной тратой пространства (не говоря уже о времени компиляции). Никто не случайно не устанавливает переменную объекта, и сеттер не мешает вам это делать ... когда вы хотите изменить свойство, вы просто вызовите сеттер (как сеттер «защищает» свойство-если вы Собираюсь сделать опечатку и напрямую установить неправильное значение свойства, вы сделаете ту же опечатку и вызовут неправильный сеттер). И сеттер или Getter очень редко делать что -то, кроме как получить или установить свойство. Если вам нужно сделать что -то особенное, чтобы установить или получить свойство, это свойство должно быть методом (см. http://www.yegor256.com/2014/09/16/getters-and-setters-are-evil.html), или вы должны рефактовать свой код, или вы должны вызывать функцию проверки свойства (как правило, на момент создания объекта). Это один из тех необоснованных трюизмов, которые мешают миру Оо. Подумайте об этом, прежде чем отправить стандартный ответ полученной мудрости.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top