Трехуровневая архитектура и odata
Ссылающийся этот вопрос:
Я хочу начать писать свои веб-API-сервисы с помощью ODataControllers в будущем, но я все еще сталкиваюсь с вопросом, на который не могу ответить с помощью Google:
Все примеры oData, которые я нашел в интернете (например ODataSamples) обращаются к объекту DBContext непосредственно в контроллере:
public class MoviesController : ODataController { private MoviesContext _db = new MoviesContext(); public IHttpActionResult Get() { return Ok(_db.Movies); } }
Таким образом, уровень представления напрямую публикует объекты базы данных, что, очевидно, вредит трехуровневой архитектуре хорошо структурированного программного обеспечения.
Обычно у меня есть три типа моделей: Модели просмотра в PL, бизнес-модели в BL и модели сущностей в DAL.
Но с oData + Entity Framework все примеры больше не следуют этому консенсусу. Это только для простоты или вообще нормально кодировать таким образом?
Есть предложения?
Что я уже пробовал:
Я мог бы переслать свои ODataQueryOptions с контроллера на мой DAL и применить его к EDM там. Результат возвращается к моему PL в соответствующих классах.
Другая идея состоит в том, чтобы использовать деревья выражений в BL, но я не узнал, как это сделать. Это была всего лишь идея.
johannesnestler
примеры приведены для простоты - я использую EntityFramework и OData с отдельным DAL - надеюсь, вы не ожидаете кода корпоративного уровня в примерах и учебниках...
Так что если ваше приложение "достаточно большое", то я бы сказал, что вы идете на свое обычное наслоение!
sunset747
Можете ли вы указать "я использую EntityFramework и OData с отдельным DAL". Мне действительно нужны три слоя, и я также хочу использовать oData. Но во всех примерах с тремя слоями + фильтрация oData выполняется на веб-сервере, а не в базе данных.