The key to getting MVC correct is understanding what models are
Как MVC стало таким бардаком
Классическое Smalltalk-MVC:
- Model — данные, ничего не знает об UI.
- View — рисует Model, подписывается на её изменения.
- Controller — переводит клики/клавиши в команды Model.
Связь Model→View только через наблюдение (observer), поэтому Model переиспользуема.
Apple (и большинство фреймворков) всё перепутали:
- View и Controller слили в «View-Controller» — толстый монстр, который одновременно держит UI-элементы и кучу логики.
- Controller превратился в мусорный бак кода, «непереиспользуемый — но это нормально».
- Model зачастую делают пассивной структурой, а состояние хранят в самом виджете (чекбокс знает своё значение).
Итог: вместо «Model как источник истины» получаем размазанное состояние по View-Controller’ам, гонки данных и невозможность тестировать.
Почему случилось: в C/Pascal сделать observable-Model было больно, поэтому в Xerox Lisa пожертвовали чистотой ради скорости. За ними потянулись все.
Как надо:
Model — любой observable-объект (даже bool
в обёртке). View подписывается и рисует текущее значение; никогда не спрашивает «каков чекбокс?» — он знает только Model. Controller лишь говорит Model «переключись». Можно цеплять сколько угодно View к одной Model без изменения кода.