Документы Apple на самом деле объясняют MVC лучше, чем что-либо еще, что я читал. В основном путаница, связанная с MVC, заключается в том, что это сложный паттерн. Он состоит из многих основных моделей. Хотя MVC не был обсужден в Design Pattern Gang из четырех , основные шаблоны были.
Основное различие, я думаю, в том, что в
мир Apple, контроллер является
образец посредника в дополнение к тому, что
это обычно так.
Так что в отличие от традиционного подхода
модели в мире Apple не уведомляют
взгляды на изменения. Они не уведомляют
кто-нибудь на самом деле. Если вы хотите изменить
модель, которую вы должны сделать это через
контроллер, чтобы убедиться, что все
уведомлено об изменениях.
Я думаю, что этот подход намного лучше, чем традиционный. Это не накладывает никаких ограничений на объекты модели. Им не нужно реализовывать какой-либо конкретный интерфейс. Они просто должны решить конкретные проблемы. Таким образом, вы можете очень легко использовать их в других приложениях.
В этом подходе должны быть переписаны главным образом объекты контроллера. Конечно, Apple изменила это с помощью привязок. Но если вы не используете привязки, то Controllers зависит от конкретного приложения.
Использование Apple MVC в C ++
На самом деле я следовал дизайну Apple при программировании приложений на C ++ с использованием Qt. Представления QWidget. Я поместил весь код, связанный с внешним видом, в подкласс QWidget. Затем я делаю свой контроллер подклассом QObject и заставляю его создавать объекты представления и подключать сигналы от QWidgets к слотам в моем контроллере QObject. Мой модельный класс - это обычный класс, который ничего не наследует от Qt и реализует бизнес-логику. Он модифицируется слотами контроллеров.
В качестве альтернативы QWidgets можно создавать вне контроллера, поэтому вы можете повторно использовать контроллер для других типов представлений.
Не уверен, что это кому-нибудь поможет, но я думаю, что иногда проще думать о шаблонах Какао в терминах C ++, потому что мы привыкли объяснять шаблон в терминах статически типизированного языка, такого как C ++ и Java.