MVCS - служба контроллера представления модели
Я давно использую MVC и слышал о слое "Service" (например, в веб-проекте Java), и мне было интересно, является ли это реальным архитектурным паттерном, учитывая, что я не могу найти много информации о Это.
Идея MVCS состоит в том, чтобы иметь сервисный уровень между контроллером и моделью, чтобы инкапсулировать всю бизнес-логику, которая может быть в контроллере. Таким образом, контроллеры просто для пересылки и управления выполнением. И вы можете вызывать Сервис во многих контроллерах (например, веб-сайт и веб-сервис), без дублирования кода.
3 ответа
Уровень обслуживания может быть истолкован многими способами, но обычно там, где у вас есть основная логика бизнес-обработки, он находится ниже вашей архитектуры MVC, но выше вашей архитектуры доступа к данным.
Например, ваш слой законченной системы может выглядеть так:
- View Layer: ваш MVC фреймворк и код выбора
- Сервисный уровень: ваш контроллер будет вызывать объекты этого слоя для получения или обновления моделей или других запросов.
- Объекты доступа к данным: это абстракции, которые ваш сервисный уровень будет вызывать для получения / обновления необходимых ему данных. Этот уровень обычно вызывает либо базу данных, либо какую-либо другую систему (например, сервер LDAP, веб-сервис или DB типа NoSql)
Сервисный уровень будет тогда отвечать за:
- Получение и создание вашей "Модели" из различных источников данных (или объектов доступа к данным).
- Обновление значений в различных репозиториях / ресурсах.
- Выполнение прикладной логики и манипуляций и т. Д.
Ваша Модель, которую вы используете в своем MVC, может или не может быть получена от ваших услуг. Возможно, вы захотите взять результаты, которые предоставляет вам ваш сервис, и манипулировать ими в модели, более специфичной для вашего носителя (например, веб-страницы).
Я сам думал об этом паттерне, не видя никакой ссылки на это где-либо еще, искал в Google и нашел здесь Ваш вопрос:)
Даже сегодня мало кто говорит или пишет о
Сервисный шаблон View-Controller.
Мысль, чтобы вы знали, что другие думают так же, и изображение выше, как я вижу, как это должно быть.
В настоящее время я использую его в проекте, над которым я сейчас работаю.
У меня есть это в модулях с каждым слоем на изображении выше с его отдельным модулем.
Уровень служб является "соединителем", "посредником", "контроллером на стороне сервера" в том смысле, что контроллер на стороне "клиента" делает для клиента, "служба" - для сервера.
Другими словами, "Контроллер" на стороне Клиента только "общается" с "Сервисом", также называемым Контроллером на стороне Сервера.
Контроллер ---> Запросы и получение от <----- сервисного уровня
Сервисный уровень выбирает или предоставляет информацию слоям на стороне сервера, которые в этом нуждаются.
Сервис сам по себе ничего не делает, кроме как соединяет уровни сервера с тем, что им нужно.
Вот пример кода:
Я использую шаблон MVCS в течение многих лет, и я не знал, что кто-то еще делал это, так как я не мог найти никакой достоверной информации в Интернете. Я начал использовать его инстинктивно, если хотите, и он никогда не подводил меня для проектов Laravel. Я бы сказал, что это очень удобное в обслуживании решение для проектов среднего размера, особенно при работе в гибкой среде, где бизнес-логика постоянно меняется. Такое разделение ответственности очень удобно.
Сказав это, я обнаружил, что уровень обслуживания не нужен для небольших проектов или прототипов и тому подобное. Я совершил ошибку, чрезмерно усложнив проект при создании прототипов, и в конечном итоге это означает, что на реализацию вашей идеи уходит больше времени. Если вы серьезно относитесь к поддержке проекта в среднесрочной перспективе, тогда MVCS - идеальное решение IMO.