Какой из этих шаблонов является хранилищем? - PullRequest
3 голосов
/ 07 февраля 2010

Мои доменные объекты выстроены в линию как дерево:

Root
- ребенок 1
- ребенок 1,1
- детский 1,2
- ребенок 2
- ребенок 2,1
- ребенок 2,2

В итоге мы получили 2 (довольно сильных) мнения о том, как должен создаваться репозиторий вокруг этих доменных объектов:

Мнение 1:
Мне нужно 2 репозитория Child1Repository & Child2Repository, который управляется классом RootFacade / RootManager для вызова соответствующего метода в репозитории. 2 дочерних репозитория обрабатывают только операции DAL, в то время как RootFacade является BLL. RootFacade предоставляет DTO приложения, в то время как внутри всех трех репозиториев используются доменные объекты

Мнение 2:
Мне нужен 1 репозиторий RootRepository, который обрабатывает все (BLL + DAL). Хранилище предоставляет DTO, а внутренне работает с объектами домена

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

Спасибо за помощь

Ответы [ 2 ]

3 голосов
/ 07 февраля 2010

Классы не должны брать на себя больше ответственности, чем нужно, и это определенно звучит так, как будто подход RootRepository - это неправильный путь. Он поглощает слишком много сложности и отвечает за слишком много сущностей. Из двух представленных вами вариантов лучше выбрать первый: иметь больше репозиториев, каждый из которых отвечает за собственный уголок вашего домена.

Однако, тем не менее, мне не ясно, почему у вас вообще есть RootManager. Я бы предпочел иметь серию DomainObjectRepositories, каждый из которых управлял своей собственной бизнес-логикой внутренне и предоставлял только соответствующие публичные операции, а затем переносил фактические операции с базой данных на объект доступа к данным DomainObjectDao. Наличие всезнающего класса «все-бизнес-логика» - это чудовищный запах кода, и в этом конкретном случае отмахивается от излишнего предприимчивости.

0 голосов
/ 07 февраля 2010

Мы работаем с вариантом 1, и он нам подходит. Скажем, дочерний элемент 1 является репозиторием пользователя, а дочерний 2 - репозиторием ролей, а фасад является фасадом безопасности. Пользовательский репозиторий будет возвращать объект пользовательского домена, который был совокупным корнем, а пользовательские объекты содержат роли. Мы бы действительно использовали репозиторий ролей для GetAllRoles.

Наши доменные объекты имеют метод GetDTO, который возвращает dtos для транспорта фасадом.

Надеюсь, это поможет.

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