Чем шаблон ActiveRecord отличается от шаблона Domain Object или Data Mapper?
-
01-07-2019 - |
Вопрос
Я смотрел на Преобразователь данных, который, как показалось на первый взгляд, использует шаблон ActiveRecord ORM.Другие люди говорили, что он использует DataMapper и / или шаблон объекта домена.
В чем разница между этими шаблонами?
Решение
Основное различие между этими двумя паттернами заключается в следующем:
В ActiveRecord у вас есть один доменный объект, который знает всю бизнес-логику и как сохранять / обновлять себя в базе данных, user.getLinkToProfile() и User::find(1), User::save(пользователь)
В шаблоне DataMapper у вас есть один доменный объект, который содержит всю бизнес-логику, например, user.getLinkToProfile() (или что-то подобное), но знает ничего что касается базы данных, о которой идет речь, то в дополнение к этому у вас есть mapper-object, который отвечает за сохранение, обновление, выбор и т.д.пользовательские объекты из базы данных, которые будут иметь UserMapper::find(1), UserMapper.save(пользователь)
DataMapper потенциально более сложный, чем ActiveRecord, но намного проще разработать вашу доменную модель и асинхронную базу данных, чем с ActiveRecord.
Другие советы
Активная запись очень тяжелая, средство сопоставления данных и доменный объект разделяют эти проблемы, поэтому у вас есть более определенный набор кода, выполняющий различные аспекты для ваших объектов "домена" или "сущности".
Я лично предпочитаю, хотя вы и не спрашивали, использовать разделение на domain object, data mapper, вероятно, использовать шаблон сборки и даже шаблон передачи данных, чтобы обеспечить четкое разделение того, что происходит с данными между базой данных и верхними уровнями приложения.
..элегантное и простое разделение всегда помогает.