Внутри моего домена у меня есть объекты с бизнес-логикой и некоторые доменные службы. На уровне приложений у меня есть службы более высокого уровня, которые я называю менеджерами. Эти менеджеры получают DTO, сопоставляют их с объектами домена для доступа к валидаторам, методам и бизнес-логике, применяют изменения, а затем сопоставляют результаты обратно с DTO для возврата.
На уровне приложения Иногда мне нужно, чтобы один менеджер позвонил другому менеджеру. Однако, поскольку менеджеры используют DTO как для ввода, так и для вывода, это приводит к появлению большого количества избыточного кода для сопоставления DTO с объектами домена и наоборот. В частности, это включает в себя:
- Сопоставление входного DTO с объектом домена.
- Вызов другого менеджера с помощью DTO.
- Вызов другого менеджера с помощью DTO.
Получение DTO в результате. - Сопоставление результата DTO обратно с объектом домена.
- Сопоставление конечный результат возвращается в DTO для уровня инфраструктуры.
Поэтому я пытаюсь инкапсулировать внутреннюю логику во внутренние службы, которые напрямую используют сущности домена и могут быть внедрены в мои менеджеры. Таким образом, я могу создавать общедоступные методы в своих менеджерах, которые полагаются на мои внутренние службы и доступны только для уровня инфраструктуры, избегая при этом необходимости передавать DTO между менеджерами, сокращая избыточное сопоставление и не раскрывая напрямую сущности моего домена.
Но если я использую внутренние сервисы и внутренние интерфейсы, я теряю возможность внедрения зависимостей. При попытке внедрить внутренний интерфейс в службу на уровне инфраструктуры я получаю следующую ошибку:
Непостоянная доступность: тип параметра «Интерфейс» менее доступен. чем метод «Конструктор»
Если я сделаю свои интерфейсы общедоступными, я все равно смогу реализовать их во внутренних сервисах, но это также сделает их доступными на внешних уровнях, таких как как инфраструктура. Я хочу, чтобы моя инфраструктура полагалась только на моих менеджеров.
Каково обычное решение этой проблемы, это вообще проблема или люди обычно принимают перегрузку картографирования? Должен ли я использовать DTO между моими службами приложений?
Подробнее здесь: https://stackoverflow.com/questions/790 ... sive-dto-m