Какой степенью ответственности должен обладать мой репозиторий / сервис?
-
21-09-2019 - |
Вопрос
У меня есть следующие объекты:
Человек <- Контакт -> Представитель клиента <- Клиент
Я использую шаблон репозитория с уровнем сервиса.Но уже здесь, будучи перфекционистом, я теряюсь!
У меня также есть PersonService, ClientService, и я почти уверен, что мне нужно иметь ContactService, который должен вызывать PersonService.Добавьте (person) и clientsPersonService.Добавить (клиент) - или?
Задача состоит в том, чтобы добавить контакт.Контакт должен иметь связанный объект Person и объект ClientsPerson.И этот клиентский представитель был бы офк.у меня есть Клиент.
Куда должны направляться различные рабочие места?Я слышал, что плохо вызывать службу / репозиторий из одного в другой.
Решение
Этот ответ зависит от вашего ORM и того, как он каскадирует сохранения.Мы будем предполагать, что вы не используете ORM, который каскадирует изменения.
Ваши методы уровня обслуживания должны отражать действия, которые вам необходимо выполнить с точки зрения бизнеса.Часто я обнаруживаю, что действия моего контроллера очень точно совпадают с методами обслуживания.
В вашем примере я бы создал сервис, связал его с необходимыми объектами и обратился к репозиториям, чтобы сохранить их;таким образом, если возникнет проблема при общении с репозиториями, он может откатиться назад и выполнить любую необходимую очистку.
Репозитории должны быть относительно тупыми.Сервисы должны обеспечивать взаимоотношения и деловую работу (за исключением чего-то вроде NHib, и, возможно, даже тогда).