Я не знаю ни одного реального примера, который мог бы похвастаться, потому что я думаю, что я придумал схему расслоения контроллера MVC приложений -> service ->, основанную на случайных вопросах и ответах, которые я нашел, просматриваяSO.
Тем не менее, я могу дать вам пример того, как организовать перечисленные вами маркеры так, чтобы они соответствовали тому, как я структурировал свой уровень обслуживания.Возможно, это не лучший способ, но именно так я делаю свое крупномасштабное приложение MVC.Это должно дать вам представление о том, как структурировать его в вашем собственном приложении
Мой уровень обслуживания объединяет один класс обслуживания на одну бизнес-единицу.Поэтому, если в моем приложении есть проекты, а в каждом проекте есть человек, у меня был бы класс ProjectService и класс PersonService.
Исходя из вашего описания работы ваших контроллеров, действия моего контроллера работают следующим образом.
1) Получите информацию о текущем пользователе и вызовите метод авторизации соответствующего класса обслуживания.Поэтому, если пользователь пытается изменить детали проекта, я бы передал идентификатор пользователя и идентификатор проекта методу AuthorizeUser в ProjectService.Это означает, что если я изменяю способ авторизации пользователей для проектов, мне нужно только изменить метод авторизации, а не каждый контроллер.
2) Модели представления создаются, сохраняются и уничтожаются на уровне обслуживания.Сервисный уровень берет модель представления, проверяет ее (вызывает исключение или результат проверки в случае сбоя), а затем преобразует его в объект данных, который затем передает в хранилище для сохранения.Он также запрашивает объект данных из хранилища, преобразует его в модель представления и возвращает его в контроллер.
3) Регистрация всех действий происходит на уровне сервиса.Это может быть автоматическим в зависимости от представляемого действия (попытка сохранить объект в БД) или ваш контроллер может явно вызвать сервисный уровень для регистрации действия.
Весь смысл в этом заключается в консолидации общих функцийв легко обслуживаемый слой.Если вы измените, как ваша модель представления преобразуется в DTO, ОЧЕНЬ легко узнать, где внести изменение и сделать его один раз.Если вам нужно изменить свое журналирование, доступ пользователя или даже если вы хотите изменить способ получения определенных данных из репозиториев, это одна простая область для изменения, вместо того, чтобы искать все ваши контроллеры и изменять их напрямую.
Редактировать : Это делает контроллеры маленькими, так как они действительно содержат только несколько обращений к сервисному слою и все (Авторизация, выполнение действия, Показать представление). Конец редактирования
Наконец, на сайте asp.net есть учебное пособие для выполнения проверки на уровне сервиса.Этот урок можно найти здесь .