Это старая версия документа!
Набор архитектурных идей и принципов для построения сложных информационных систем с пользовательским интерфейсом
Model
Содержит всю бизнес-логику приложения
Самая независимая часть системы, она не должна ничего знать о двух других модулях
View
Отвечает за отображение данных пользователю, все что видит пользователь
Представляет информацию из модели в удобном для пользователя виде
Controller
Код, который отвечает за обработку действий пользователя
Именно через него вносятся изменения в модель
Ключевая идея в том что любое приложение, в первом приближении, можно разбить на два модуля
Первый модуль содержит основной функционал приложения, он является ядром системы, в которой реализована модель предметной области
Во втором реализован весь пользовательский интерфейс, включая отображение и логику взаимодействия пользователя с приложением
Для еще большей независимости модели от интерфейса, интерфейс должен быть в роли т.н. наблюдателя, шаблон проектирования, из серии сигнало-слотов
При каких либо изменениях, модель просто посылает сигнал, все подписчики его получают и реагируют
Один из вариантов разделения это функциональный, т.е. у интерфейса есть две функции, «вводить» данные и «выводить» их, по этой линии можно и выполнить разделение
Вид и контроллер не должны напрямую работать с классами/методами модели, иначе теряется независимость
Модель представляет тесно связанный между собой набор классов, к которым ни у Вида ни у Контроллера не должно быть доступа
Для связи необходимо реализовать шаблон проектирования «Фасад», он и будет той самой прослойкой между Моделью и интерфейсом. Вид и Контроллер работают только с методами классов фасада, как и модель, тоже взаимодействует только с фасадом