Управление вызовами внутренних служб на уровне приложения DDD без чрезмерного сопоставления DTOC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Управление вызовами внутренних служб на уровне приложения DDD без чрезмерного сопоставления DTO

Сообщение Anonymous »

Я разрабатываю приложение с использованием DDD с уровнем домена, приложения и инфраструктуры.
Внутри моего домена у меня есть объекты с бизнес-логикой и некоторые доменные службы. На уровне приложений у меня есть службы более высокого уровня, которые я называю менеджерами. Эти менеджеры получают DTO, сопоставляют их с объектами домена для доступа к валидаторам, методам и бизнес-логике, применяют изменения, а затем сопоставляют результаты обратно с DTO для возврата.
На уровне приложения Иногда мне нужно, чтобы один менеджер позвонил другому менеджеру. Однако, поскольку менеджеры используют DTO как для ввода, так и для вывода, это приводит к появлению большого количества избыточного кода для сопоставления DTO с объектами домена и наоборот. В частности, это включает в себя:
  • Сопоставление входного DTO с объектом домена.
  • Вызов другого менеджера с помощью DTO.
  • Вызов другого менеджера с помощью DTO.
    Получение DTO в результате.
  • Сопоставление результата DTO обратно с объектом домена.
  • Сопоставление конечный результат возвращается в DTO для уровня инфраструктуры.
Это повторяющееся сопоставление приводит к созданию ненужного шаблонного кода.
Поэтому я пытаюсь инкапсулировать внутреннюю логику во внутренние службы, которые напрямую используют сущности домена и могут быть внедрены в мои менеджеры. Таким образом, я могу создавать общедоступные методы в своих менеджерах, которые полагаются на мои внутренние службы и доступны только для уровня инфраструктуры, избегая при этом необходимости передавать DTO между менеджерами, сокращая избыточное сопоставление и не раскрывая напрямую сущности моего домена.
Но если я использую внутренние сервисы и внутренние интерфейсы, я теряю возможность внедрения зависимостей. При попытке внедрить внутренний интерфейс в службу на уровне инфраструктуры я получаю следующую ошибку:

Непостоянная доступность: тип параметра «Интерфейс» менее доступен. чем метод «Конструктор»

Если я сделаю свои интерфейсы общедоступными, я все равно смогу реализовать их во внутренних сервисах, но это также сделает их доступными на внешних уровнях, таких как как инфраструктура. Я хочу, чтобы моя инфраструктура полагалась только на моих менеджеров.
Каково обычное решение этой проблемы, это вообще проблема или люди обычно принимают перегрузку картографирования? Должен ли я использовать DTO между моими службами приложений?

Подробнее здесь: https://stackoverflow.com/questions/790 ... sive-dto-m
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»