DTO, уровень данных и типы для возврата

93
15

На моей работе мы используем Entity Framework для доступа к данным. Я создаю уровень доступа к данным, уровень доступа к бизнесу и несколько различных типов проектов для доступа к BLL (веб-интерфейс для клиентских приложений для взаимодействия с несколькими веб-сайтами MVC и несколькими различными приложениями WinForm для настольных компьютеров).

Я добавил DTO в отдельный проект под названием "DTO". Целью этого проекта в рамках этого решения является наличие библиотеки DLL со всеми определениями для классов и интерфейсов, которые будут проходить взад и вперед. Таким образом, этот проект может быть создан как подмодуль git в других решениях и обновлен для всех проектов пользовательского интерфейса, которые будут использоваться совместно. Я не буду работать над всеми пользовательскими интерфейсами, так как мы добавим в проект больше разработчиков, и нам, вероятно, понадобится несколько решений VS.

Моя мысль заключалась в том, чтобы передать уровень доступа к данным и использовать DTO вместо объектов объектов. Это полностью отделит процесс.

Если мы когда-либо хотели заменить DAL чем-то другим, то он следовал за интерфейсами, определенными в проекте DTO, и мы должны быть в порядке. Я также думаю, что это облегчит тестирование, так как я могу заменить DAL проектом для создания DTO с чем-то вроде Seed.net. Замена BTW - реальная возможность, учитывая нашу окружающую среду.

Является ли добавление этого уровня сложности плохим или против стандартов проектирования? Есть что-то, чего я не хватает?

спросил(а) 2018-06-24T19:16:00+03:00 2 года, 4 месяца назад
1
Решение
58

Это то, как я работаю, и работая в облачном мире уже несколько лет, похоже, так, как все работают. Как правило, у вас есть следующие проекты (каждый из них создается для отдельной сборки)

- REST controllers
- Models
that are used to pass information between Controller layer and Business Logic
- Business Logic Interfaces (like ImyService)
- Business Logic (like myService)
- DTOs
- IRepository (like ImyRepo)
- Repository (like myRepo)
--> this is the same as DAL.

Самое замечательное в этом заключается в том, что если вы добавите инверсию зависимостей (IoC), вы можете сделать mock Repo, чтобы изолировать и протестировать уровень сервиса (Business Logic) и т.д., Введя его в модульные тесты NUnit.

Нередко люди в отрасли (включая меня) используют AutoMapper для преобразования моделей в DTO в Entities и наоборот.

ответил(а) 2018-06-24T19:37:00+03:00 2 года, 4 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема