Доступ к sql-db с EF на уровне данных, как передать данные на уровень обслуживания?
Мне нужно получить доступ к некоторым данным в существующей базе данных sql и опубликовать их, используя REST-сервис (используя Webapi).
В моем предыдущем очень маленьком проекте я просто обращался к EF-Context непосредственно из моих контроллеров, создавал некоторые DTO из моих EF-Entities и возвращал их вызывающей стороне. Это было просто, и я заработал очень быстро.
Сейчас проект не намного больше, но на этот раз я хочу сделать это "правильно", поскольку все говорят об многоуровневой архитектуре, даже для небольшого проекта, поэтому модульное тестирование и т. Д. Намного проще.
Будучи новичком в этом (да, мне нужно читать больше книг), я решил начать читать тонны постов в блоге об архитектурном дизайне приложения и так далее.
Первым делом нужно было познакомиться с различными методами доступа к данным в базе данных с помощью EF (я использую v6.2, DB-First). Некоторые говорят, что вам нужен репозиторий для каждой сущности, некоторые говорят, что создают общий репозиторий, а другие говорят, что репозитории - это новое зло, избегайте их любой ценой.
Некоторые посты в блоге, которые я прочитал:
родовая-Даль-использования-сущность-рамка
это-The-хранилище шаблоны полезно-с-сущность-рамка
Хранилища-на-топ-UnitOfWork-это-не-а-хорошая идея,
почему-субъект-каркасный оказывает-на-хранилище-модель устаревшая
благосклонность-запрос-объекты-над-хранилищами
и так далее.
Даже некоторые другие говорят, что разделение ваших POCO, сгенерированных EF, должно быть отделено от "чистого" EF-материала, такого как EDMX:
Некоторые из постов старые и, возможно, устарели, но я просто пытаюсь найти лучший способ выполнить свою задачу.
Сейчас у меня 4 проекта:
DGO.Core: Содержит мой DTO
DGO.Data: Содержит мой EF-Stuff и 1 Repository-Class (подробности см. Ниже).
DGO.Service: ссылка на DGO.Data и доступ к методам, предоставляемым классом хранилища.
DGO.Webapi: Ссылка на все три DLL, но с использованием методов из Service-Dll. Мне нужно ссылаться на Data-Dll, чтобы иметь возможность внедрить хранилище данных.
Так что теперь мои db-запросы находятся в Data-DLL (в так называемом классе репозитория), которая создает заполненные DTO из моей Core-DLL. Эти DTO затем передаются в Service-DLL, которая может кое-где обрабатывать логику, а затем этот DTO передается в Webapi-Controller.
Это общий подход при прохождении этих DTO через все уровни? Или лучше отделить POCO от EDMX и использовать их непосредственно в моем слое обслуживания.
Таким образом, направление будет "Уровень данных" -> "POCO" -> "Уровень обслуживания" -> "DTO" -> Клиент (контроллер и т. Д.).
И где должны проходить запросы? Я думаю, на уровне данных, но некоторые говорят, что это должно быть сделано на уровне обслуживания. Я думаю, что уровень данных отвечает за запрос данных, а уровень обслуживания отвечает за "работу" с данными.
Надеюсь, я прояснил свои проблемы. Может предоставить код, если это необходимо. Спасибо!