Dtos в луковой архитектуре - PullRequest
       18

Dtos в луковой архитектуре

0 голосов
/ 27 августа 2018

Что-то не так с моей структурой.У меня есть webapi (проект со всеми контроллерами), и есть ссылка на мой уровень IService в основном проекте (классы IServices в основном), здесь также есть основные объекты (доменные объекты).

Из проекта wepapi я вызываю свои Iservices и получаю ответ с объектами от сущностей домена.

А теперь мой вопрос Должны ли службы возвращать и принимать доменные сущности (простой клиент) или DTO: s (customerForUpdate, customerForCreate).

Если я возвращаю доменные сущности, я получаю много запросов на несколько службсоздать мой DTO.пример клиента с тряпкой (клиент - одна услуга, а ткань - другая).Это заставляет ядро ​​Ef переворачиваться из-за того, что каждый сервисный метод вызывает сохранение в unitOfWork.Пример: я вызываю fabricservice, чтобы получить значение для использования для клиента и снова обновить fabricservice.

Если я возвращаю Dto: s из моих IServices, мне нужно добавить ссылку из сервисного проекта в DTO (в моем случаепроект).Но в этом случае я могу вызвать другие службы в этом проекте и создать свой dto.и просто вызовите save один раз, когда я закончу.

Или есть другой способ просто вызвать save один раз за вызов webapi, или я неправильно понял dtos, этот тип dtos должен находиться в ядре, а не потому, что он нереальный dto: s?

1 Ответ

0 голосов
/ 28 августа 2018

в соответствии с луковой архитектурой, все зависимости должны быть на уровне домена, и каждый уровень со своим собственным более высоким уровнем может обмениваться данными.Дело в том, что уровень домена не должен иметь доступа к уровню домена и другим уровням, таким как инфраструктура, и только на уровне веб-служб или пользовательском интерфейсе должен видеть только уровень приложения, теперь ваша проблема заключается в том, чтобы это исправить.Создайте слой отдельно от прикладного уровня, в котором интерфейсы прикладного уровня названы (Application.Contracts). На этом уровне, в дополнение к интерфейсам, которые вы определяете для прикладного уровня, вы определяете DTO на том же уровне.Затем, с помощью этого, вы определяете интерфейс, который вы хотите определить для прикладного уровня, он работает только с этими (DTO), так что уровень веб-службы или уровень пользовательского интерфейса не имеет доменного уровня.

-Application
    StudentService
    TeacherService

-Application.Contracts
          --Interfaces
              IStudentService
              ITeacherService
          --DTO
              StudentListDto
              TeacherDto
-UI Or Web service layer
 //Only can work with Application.Contracts
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...