Возможно, я слишком долго занимался разработкой Flex с такими фреймворками, как Cairngorm, но я все еще не получаю MVVM. Я знаю, что Cairngorm - это фреймворк, а MVVM - это шаблон проектирования, но здесь я сравниваю реализации Cairngorms шаблонов проектирования, главным образом контроллера представления модели и шаблона команд. Не поймите меня неправильно, я думаю, что идея связать представление с моделью представления велика, а преимущества в тестируемости и рабочем процессе дизайнера-программиста велики. Но меня беспокоят две вещи: одна - программирование всех моих действий с помощью команд, что, кстати, также ограждает меня от Cairngorm. Только в Cairngorm способ, которым они реализовали шаблон команд, дал вам преимущество наличия централизованного контроллера для всех ваших команд, который вы, похоже, не получите с MVVM, если я что-то не упустил. И если я думал, что реализация команд в Cairngorm была запутанной в MVVM, это намного хуже, я имею в виду необходимость создавать частные классы, которые реализуют ICommand для всего, что я делаю, кажется слишком много. И тогда у вас возникает проблема, что не все элементы управления реализуют команды, например, если вы используете ListBox, который я часто использую, вам не повезло; Есть обходные пути, но все они запутаны.
Другая вещь, которая беспокоит меня, это связь между View Models. В стандартном контроллере модельного представления вы собираете всю свою информацию о централизованной модели, которая наблюдается представлениями, но, похоже, это не относится к MVVM, по крайней мере, в примерах, которые я видел. Так, например, если у вас есть элемент управления со списком, который вы используете для выбора элемента, который затем используется в качестве источника для различных представлений и последующих действий, мне неясно, как вы уведомите всех об изменениях без централизованной модели.
Я знаю о MVVMFoundation и работе Тома Эршамама о командах WPF Everywhere. Меня назвали старомодным, но я думаю, что для того, чтобы по-настоящему понять шаблон, нужно создать приложение, которое использует его с нуля. Это то, что я делаю, но все время думаю, что, должно быть, упускаю что-то важное, потому что мне кажется, что я не могу успокоить этот маленький голос в моей голове, который постоянно говорит мне, что должен быть лучший способ.