Чем шаблон ActiveRecord отличается от шаблона «Доменный объект» или «Data Mapper»? - PullRequest
9 голосов
/ 18 сентября 2008

Я смотрел на DataMapper , который, на первый взгляд, использовал шаблон ActiveRecord ORM. Другие люди сказали, что он использует шаблон DataMapper и / или Domain Object.

В чем разница между этими образцами?

Ответы [ 2 ]

20 голосов
/ 18 сентября 2008

Основное различие между двумя шаблонами заключается в следующем:

  • В ActiveRecord у вас есть один объект домена, который знает всю бизнес-логику и знает, как сохранить / обновить себя в базе данных, user.getLinkToProfile () и User :: find (1), User :: save (пользователь)

  • В шаблоне DataMapper у вас есть один объект домена, который содержит всю бизнес-логику, например, user.getLinkToProfile () (или что-то подобное), но не знает ничего о рассматриваемой базе данных в В дополнение к этому у вас есть объект mapper, который отвечает за сохранение, обновление, выбор и т. д. пользовательских объектов из базы данных, которые будут иметь UserMapper :: find (1), UserMapper.save (user)

DataMapper потенциально более сложен, чем ActiveRecord, но разработать модель вашего домена и базы данных намного проще, чем с ActiveRecord.

2 голосов
/ 18 сентября 2008

Активная запись очень тяжелая, преобразователь данных и объект домена разделяют эти проблемы, поэтому у вас есть более определенный набор кода, выполняющий различные аспекты для ваших объектов «домен» или «сущность».

Лично я предпочитаю, а не то, что вы спросили, когда идет разделение на объект домена, преобразователь данных, возможно, используйте шаблон сборки и даже шаблон передачи данных, чтобы обеспечить четкое разделение того, что происходит с данными между базой данных и верхними уровнями. заявки.

... элегантные и простые разделения всегда помогают.

...