В чем различия между Active Record и Repository pattern? - PullRequest
5 голосов
/ 25 июля 2010

Мне кажется, что единственное отличие состоит в том, что Active Record имеет методы CRUD в классе контейнера данных, а шаблон Repository использует отдельный класс для контейнера данных и методов CRUD, но, безусловно, я ошибаюсь.

В чем различия между Active Record и Repository pattern? Когда я должен использовать какой шаблон?

Ответы [ 2 ]

5 голосов
/ 25 июля 2010

По сути, ваше предположение верно.Шаблоны хранилища и DAO экстернализуют проблемы персистентности, в то время как Active Record их интернализует.На самом деле я видел некоторые реализации, в которых классы активных записей внедрялись с экземпляром репозитория, который внутренне обеспечивал их постоянство.

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

2 голосов
/ 27 июля 2010

IMO, Шаблон Repository помогает уменьшить количество запросов к базе данных, поскольку он обучает вас думать с точки зрения транзакций и пакетирования команд, тогда как с шаблоном Active Record легко увлекаться вызовами .save(), .fetch () и т. д. с опрометчивой энергией.Базы данных могут быть достаточно большими узкими местами, не усугубляйте их ненужными запросами.

...