Репозиторий все еще репозиторий без единицы работы? - PullRequest
9 голосов
/ 24 апреля 2009

Если вы создаете класс репозитория, который инкапсулирует всю вашу логику персистентности для данной сущности, например PersonRepository, но ваш класс репозитория не реализует шаблон Unit of Work или шаблон Identity Map, все еще считается ли он репозиторием? Другими словами, требуются ли единицы работы и карта идентичности для реализации репозитория, или мы можем просто назвать любой класс, который инкапсулирует нашу логику персистентности, в репозиторий?

Я должен добавить одну вещь. Если хранилище не требует этих шаблонов и это просто контейнер для методов персистентности, то в чем разница между хранилищем и DAO (объектом доступа к данным)? Мы просто создаем несколько имен для одного и того же объекта или нам не хватает части того, чем должен быть репозиторий?

Ответы [ 4 ]

3 голосов
/ 28 апреля 2009

Я бы сказал, что шаблоны репозитория и единицы работы ортогональны.

Очень часто я хочу, чтобы одна единица работы охватывала операции в нескольких репозиториях, поэтому реализация этого будет относиться к более высокому уровню.

3 голосов
/ 24 апреля 2009

Да, это все еще хранилище.

Что касается Repository == DAO, я думаю, что Repository должен быть на уровне бизнес-логики, а DAO должен быть на уровне доступа к данным, т.е. я думаю, что они находятся на разных уровнях. Как я понимаю, репозиторий вызывает методы DAO для загрузки и сохранения данных.

1 голос
/ 12 мая 2009

При рассмотрении разделения проблем помните, что в вашем репозитории будут методы реализации хранилища данных, что позволит вам не допустить этого в основной код. Это полезно для модульного тестирования, а также, в конечном итоге, для замены вашей реализации хранилища данных (примером реализации хранилища данных может быть LINQ-to-SQL в ASP.NET.)

1 голос
/ 28 апреля 2009

Основываясь на том, что сказал Sii - мне кажется, лучше , если хранилище и единица работы не связаны. Разделение проблем?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...