Hacker News Digest

07 сентября 2025 г. в 01:26 • stlab.cc • ⭐ 176 • 💬 158

OriginalHN

#mvc#smalltalk#controller#model#view#observer#ios#reactive#rad#composition

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 без изменения кода.