DataMapper ORM против доктрины

Я собираюсь начать разработку нового веб-приложения в CodeIgniter. Раньше я использовал DataMapper ORM для моих целей сопоставления объектов и полностью удовлетворил его возможности. Однако мое удовлетворение касается только моих знаний. Следовательно, я рассматриваю возможность перехода на Doctrine.

Я просмотрел документацию Doctrine - кажется, вам нужно довольно подробно определять свои модели; добавлять геттеры и сеттеры, предоставлять ссылки на направления, предоставлять сопоставление и т.д. На первый взгляд это кажется огромным накладным расходами в прямом сравнении с ORM DataMapper.

Может ли кто-нибудь, у кого есть опыт работы с ORM, прокомментировать, что привело вас от одного к другому?

Какая критическая функциональность делает Doctrine доступной, которой не работает ORM DataMapper?

Является ли определение модели вручную шагом назад или вперед? Я предполагаю, что это дело производительности.

Ответ 1

DataMapper ORM и Doctrine следуют совершенно другому набору соглашений. ORM DataMapper (достаточно запутанный) не является устройством отображения данных, а активным исполнением записи. Это означает, что ваши классы моделей тесно интегрированы с библиотекой ORM. Ваши модели построены на встроенных моделях DataMapper. Вы получаете много магии бесплатно, но взамен вы вступаете в брак с вашими моделями в ORM DataMapper.

Доктрина, с другой стороны, использует истинный шаблон отображения данных. Это модели - простые старые PHP-объекты. У них нет внешних зависимостей. Doctrine может принимать любой старый PHP-объект, хранить его в базе данных и позже извлекать его снова. Модели не связаны с ORM вообще.

То, что вы читаете в документации Doctrine о геттерах, сеттерах, реляционной целостности и т.д., это просто хорошие методы разработки OO. Они не являются требованием к Доктрине, но они облегчают вашу жизнь. Вы также должны использовать их для своих моделей ORM DataMapper! Если вы хотите, вы можете использовать магические геттеры и сеттеры или даже просто старые публичные свойства на ваших моделях Doctrine. Просто потому, что Доктрина говорит, что вы не должны этого делать, это не значит, что вы не можете этого сделать. Доктрина с радостью использует ваши модели с общедоступными свойствами, но есть некоторые оговорки. Это все.