MVC - это разделение задач в приложениях, которые принимают пользовательский ввод, выполняют бизнес-логику и выводят результаты. Здесь не сказано, где находится эта логика. Он также не указывает, что вся логика должна жить в одном процессе.
Довольно традиционное использование MVC с электронной таблицей. Давайте рассмотрим как приложение с одним процессом, так и приложение с несколькими процессами, чтобы увидеть, как они могут реализовать эту простую электронную таблицу:
A B C
----- ----- ---------
1 | 1 2 =A1+B1
Допустим, пользователь вводит число 4
в ячейку A1
. Что происходит?
ПРИМЕНЕНИЕ В ОДНОМ ПРОЦЕССЕ (например, Microsoft Excel): пользовательский ввод обрабатывается логикой представления вплоть до тех пор, пока пользователь не покинет ячейку. Как только это происходит, контроллер получает сообщение, чтобы обновить модель новым значением. Модель принимает новое значение, но также запускает некоторую бизнес-логику для обновления значений других ячеек, затронутых изменением. После завершения модель уведомляет представление о том, что ее состояние изменилось, и представление отображает новое состояние. Это уведомление может происходить через pub / sub, как предполагает @ jaco0646, но оно также может быть обработано с помощью обратного вызова.
МНОГОПРОЦЕССНОЕ ПРИМЕНЕНИЕ (например, Google Sheets): пользовательский ввод обрабатывается логикой представления (в клиенте) до тех пор, пока пользователь не покинет ячейку. Как только это происходит, контроллер (на сервере) получает сообщение (через HTTP или сокет), чтобы обновить модель (также на сервере) новым значением. Модель принимает новое значение, но также запускает некоторую бизнес-логику для обновления значений других ячеек, затронутых изменением. После завершения модель уведомляет представление о том, что ее состояние изменилось, и представление отображает новое состояние (в клиенте). Это уведомление может быть получено через HTTP-ответ контроллера или через сокет.
Другими словами, шаблон MVC применим к обоим сценариям.
Кроме того, также совершенно справедливо рассматривать клиент и сервер как два совершенно отдельных приложения, каждое из которых может реализовывать MVC. В этом сценарии и модель клиента, и представление сервера менее традиционны. Модель клиента, вероятно, выполняет запросы AJAX к серверу, в отличие от запуска самой сложной бизнес-логики или локального сохранения данных. Кроме того, представление сервера, скорее всего, представляет собой сериализатор, который создает некоторую форму структурированного вывода, понятного клиенту, например JSON, XML или даже CSV.
MVC является совершенно допустимым шаблоном в любое время, когда приложению необходимо принять пользовательский ввод, выполнить некоторую бизнес-логику и воспроизвести некоторый вывод - независимо от того, живет ли это приложение в одном или нескольких процессах - и независимо от того, является ли представление чем-то человек будет потреблять.