@Matsun

Asp Net MVC, гд лучше размещать запросы к БД?

В рамках обучения делаю свой блог на Asp Net MVC. Для работы с БД используется Entity Framework, подход Code First.
Вопрос вот в чём. Когда то слышал, что при разработке веб сайтов на MVC, запросы к БД размещать в контроллере не годится.
Соответственно тогда вот в чём вопрос, вот мой контроллер

public ActionResult ShowOne(string url = null)
        {
            Article one = repository.Articles
                    .FirstOrDefault(p => p.Url == url);

            one.FullText = Article.CreateTable(one.FullText);

            return View(one);
        }

Этот контроллер извлекает статью из БД с заданным URL.
Далее с помощью статического метода public static string CreateTable(string strStartText) (он расположен в модели предметной области) он обрабатывает текст статьи, вытягивая из него заголовки h2 и создавая на их основе оглавление.

Вот вопросы.
1. Надо ли переносить запрос к БД в модель, если да, до в какую, в модель представления или модель прдметной области? Просто тут у меня сомнения. Ведь модель предметной области представляет собой сущность статьи (подход Code First) и будет ли правильно, что помимо свойств, в модели будут ещё и методы?

2. Правильно ли метод public static string CreateTable(string strStartText) делать статическим и пумещать его туда же, есть ли более "элегантные" способы обработки полученных из бд данных?
  • Вопрос задан
  • 571 просмотр
Решения вопроса 1
@Free_ze
Пишу комментарии в комментарии, а не в ответы
Обычно приложения делят на три слоя:
  • Data Access Layer
  • Business Logic (Domain models)
  • UI (Web).


BL независим, DAL зависит от BL, UI зависит от DAL и BL (ибо там располагается интерфейсы биндятся на реальные классы).

Если мы рассматриваем классическую схему доступа к данным через репозитории, то:

BL содержит: доменные модели, интерфейсы для репозиториев, сервисы (интерфейсы и реализации, которые работают с репозиториями).
DAL содержит: реализации интерфейсов репозиториев (из BL), т.е. работу с DB, DbContext (от EF) и прочую конкретику о том, откуда и каким образом извлекаются данные.
UI (для ASP.NET MVC) содержит: собственно веб-проект с котроллерами *Controller.cs (Controllers), вьюшками *.cshtml (Views), вью-модели *.cs (Models, те специфические модели, которыми типизируются вьюхи, они могут отличаться от доменных (маппиться с них в контроллере), например, содержать объект с данными пагинации).

Также UI сожержит корень внедрения зависимостей, где связываются между собой интерфейсы и их реализации, например, интерфейсы репозиториев из BL и реализации (заточенные на работу с БД) из DAL.

Пример реализации.

ЗЫ Азы такой архитектуры применительно к ASP.NET MVC есть в замечательной книжке Фримана.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы