sunset747 Ответов: 0

Трехуровневая архитектура и 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 выполняется на веб-сервере, а не в базе данных.

0 Ответов