Бессмысленна ли ортодоксальная реализация MVVM? Я создаю новое приложение и рассмотрел Windows Forms и WPF. Я выбрал WPF, потому что он ориентирован на будущее и предлагает большую гибкость. Меньше кода и проще вносить существенные изменения в пользовательский интерфейс с помощью XAML.
Поскольку выбор WPF очевиден, я подумал, что могу пойти до конца, используя MVVM в качестве архитектуры приложения, поскольку он предлагает смешиваемость, проблемы разделения и возможность тестирования модулей. Теоретически это кажется прекрасным, как святой Грааль программирования пользовательского интерфейса. Это короткое приключение; Однако превратилось в настоящую головную боль. Как и ожидалось на практике, я обнаружил, что поменял одну проблему на другую. Я склонен быть одержимым программистом в том смысле, что хочу делать все правильно, чтобы получить правильные результаты и, возможно, стать лучшим программистом. Шаблон MVVM только что провалил мой тест на продуктивность и превратился в большой противный хакер!
Ярким примером является добавление поддержки модального диалогового окна. Правильный способ - создать диалоговое окно и привязать его к модели представления. Заставить это работать сложно. Чтобы извлечь выгоду из шаблона MVVM, вам необходимо распределить код в нескольких местах по слоям вашего приложения. Вы также должны использовать такие эзотерические программные конструкции, как шаблоны и лямба-выражения. Вещи, которые заставляют смотреть в экран, почесывая затылок. Как я недавно обнаружил, это превращает обслуживание и отладку в кошмар, ожидающий своего часа. У меня было окно about, работающее нормально, пока я не получил исключение во второй раз, когда я вызвал его, говоря, что он не может снова показать диалоговое окно после его закрытия. Мне пришлось добавить обработчик событий для функции закрытия диалогового окна, еще один в его реализации IDialogView и, наконец, еще один в IDialogViewModel. Я думал, что MVVM спасет нас от такого экстравагантного взлома!
Есть несколько людей, предлагающих конкурирующие решения этой проблемы, и все они являются хакерскими приемами и не обеспечивают чистого, легко повторяемого и элегантного решения. Большинство наборов инструментов MVVM затушевывают диалоги, и когда они обращаются к ним, они представляют собой просто окна предупреждений, которые не требуют настраиваемых интерфейсов или моделей просмотра.
Я планирую отказаться от шаблона представления MVVM, по крайней мере, от его ортодоксальной реализации. Что вы думаете? Стоило ли вам хлопот, если они у вас были? Я просто некомпетентный программист или MVVM не такой, как его рекламируют?