MVCS - служба контроллера представления модели

Я давно использую MVC и слышал о слое «Служба» (например, в веб-проекте Java), и мне было интересно, является ли это реальным архитектурным шаблоном < / strong> учитывая, что я не могу найти много информации об этом.

Идея MVCS состоит в том, чтобы иметь уровень обслуживания между контроллером и моделью, чтобы инкапсулировать всю бизнес-логику, которая может быть в контроллере. Таким образом, контроллеры будут просто перенаправлять и контролировать выполнение. И вы можете вызывать Сервис во многих контроллерах (например, на веб-сайте и в веб-сервисе), не дублируя код.


person Matthieu Napoli    schedule 18.04.2011    source источник
comment
Мне было интересно, настоящий ли это архитектурный шаблон ... ну, не более или менее реальный, чем другие шаблоны проектирования :) Все дело в выборе абстракции, которая имеет наибольший смысл - в этом случае MVCS кажется более полезная абстракция, чем MVC, когда вы имеете дело с различными источниками данных восходящего потока (модели баз данных, другие веб-службы и т. д.), и особенно когда вы начинаете думать о представлении ВАШЕЙ работы как службы. Этот шаблон помог мне повторно использовать большой объем кода, когда у меня было веб-приложение, которое я позже представил как REST API.   -  person Joe    schedule 29.05.2012


Ответы (3)


Уровень обслуживания можно интерпретировать по-разному, но обычно он находится там, где у вас есть основная бизнес-логика обработки, и находится ниже вашей архитектуры MVC, но выше вашей архитектуры доступа к данным.

Например, ваш слой полной системы может выглядеть так:

  1. Уровень просмотра: ваша структура MVC и код выбора
  2. Уровень обслуживания: ваш контроллер будет вызывать объекты этого уровня для получения или обновления моделей или других запросов.
  3. Объекты доступа к данным: это абстракции, которые ваш уровень обслуживания будет вызывать для получения / обновления необходимых данных. Этот уровень обычно вызывает либо базу данных, либо другую систему (например, сервер LDAP, веб-службу или базу данных типа NoSql).

Тогда уровень обслуживания будет отвечать за:

  • Получение и создание вашей «модели» из различных источников данных (или объектов доступа к данным).
  • Обновление значений в различных репозиториях / ресурсах.
  • Выполнение логики и манипуляций для конкретного приложения и т. Д.

Модель, которую вы используете в своем MVC, может исходить или не исходить из ваших служб. Возможно, вы захотите использовать результаты, которые дает вам ваш сервис, и преобразовать их в модель, более специфичную для вашего носителя (например, веб-страницу).

person Clinton    schedule 02.06.2011
comment
Я обычно использую сервисы для внешнего доступа. Хотя MVC будет содержать всю логику моего приложения, я буду использовать что-то вроде DBService или FacebookOAuthService для всех внешних вызовов других систем. Или обернуть стороннюю библиотеку вместо тесной интеграции, чтобы упростить отключение библиотек. Для меня было много смысла думать о подобных сервисах. - person Lex; 05.06.2014
comment
Чтобы добавить к этому, ваша модель из уровня служб будет больше похожа на объект передачи данных, это может или не может напрямую переводиться во что-то, что напрямую соответствует требованиям представления. - person hanzolo; 20.07.2017
comment
Это звучит так, как будто это просто MVC, но с добавленным фасадом, чтобы контроллер был чистым. - person David; 21.08.2019

Я сам думал об этом шаблоне, не видя никаких ссылок на него где-либо еще, поискал в Google и нашел здесь ваш вопрос :)

Даже сегодня мало кто говорит или публикует о

Шаблон службы View-Controller.

введите описание изображения здесь

Мысль, чтобы вы знали, что другие думают так же, и на изображении выше я вижу, как это должно быть.

В настоящее время я использую его в проекте, над которым сейчас работаю.

У меня он есть в модулях с каждым слоем на изображении выше с собственным автономным модулем.

введите описание изображения здесь

Уровень служб - это «соединитель», «посредник», «контроллер на стороне сервера» в том смысле, что «клиентский» контроллер выполняет для клиента, а «служба» - для сервера.

Другими словами, «Контроллер» на стороне клиента «общается» только с «Сервисом», также известным как Контроллер на стороне сервера.

Контроллер ---> Запросы и получение от уровня обслуживания ‹-----

Уровень сервиса извлекает или передает информацию тем уровням на стороне сервера, которые в ней нуждаются.

Сама по себе Служба ничего не делает, кроме как соединяет уровни сервера с тем, что им нужно.

Вот пример кода:

введите описание изображения здесь

person Kbdavis07    schedule 25.11.2016
comment
Единственное беспокойство, которое у меня вызывает этот стиль архитектуры, - это предположение, что модели данных будут иметь ту же форму, что и требования для представления. если они от 1 до 1 или близки к нему, где вы можете заблокировать пару свойств специально для представления, я думаю, это нормально, но в большинстве случаев модели данных разрабатываются с точки зрения хранилища, а модель представления разрабатывается с учетом Перспектива взглядов. - person hanzolo; 20.07.2017
comment
Есть DataModels и ViewModels, рисунок выше был сделан быстро и плохо :) - person Kbdavis07; 01.08.2017

Я использую шаблон MVCS в течение многих лет, и я не знал, что кто-то еще сделал это, так как я не мог найти никакой достоверной информации в Интернете. Я начал использовать его инстинктивно, если хотите, и он никогда не подводил меня для проектов Laravel. Я бы сказал, что это очень удобное в обслуживании решение для проектов среднего размера, особенно при работе в гибкой среде, где бизнес-логика постоянно меняется. Такое разделение ответственности очень удобно.

Сказав это, я обнаружил, что уровень обслуживания не нужен для небольших проектов или прототипов и тому подобное. Я совершил ошибку, чрезмерно усложнив проект при создании прототипов, и в конечном итоге это означает, что на реализацию вашей идеи уходит больше времени. Если вы серьезно относитесь к поддержке проекта в среднесрочной перспективе, тогда MVCS - идеальное решение IMO.

person Jonathan Port    schedule 12.05.2021