Спустя 2 года я все еще борюсь с MVVM как с практическим методом создания рабочего программного обеспечения. В некоторых случаях это здорово. Я сделал многопоточное приложение, которое контролировало небольшую сборочную линию, которая была бы кошмаром без концепций MVVM. Абстракция от физической сборочной линии была почти легкой задачей.
Тем не менее, моя карьера в основном вращается вокруг внутренних бизнес-приложений - формализации и оптимизации операций бизнеса. В таких приложениях, как правило, существует бизнес-кругооборот, связанный с CRUD и сложными операциями. В больших объектах мои модели представлений оказываются очень простыми коллекциями однострочных функций-оболочек методов бизнес-класса и, в конце концов, только усложняют простейшие задачи, такие как показ окна сообщения или открытие окна. Неужели никто не находит странным, когда люди сталкиваются с длительным различением «внедрения зависимостей» и «провайдеров обмена сообщениями» для вызова Window.ShowDialog, который существует уже десятилетия? Сколько еще вопросов о переполнении стека просят совета относительно задач, которые были чрезвычайно просты в winforms?
Не поймите меня неправильно - я получаю MVVM и то, как он может быть неоценимым для больших команд, занимающихся горизонтальной разработкой упакованного в пакет программного обеспечения. Модульное тестирование моделей представлений может сэкономить миллионы, избежав серьезной ошибки RTM, а разработчики специализированных интерфейсов могут дать богатый опыт. Но когда стоимость перераспределения минимальна, и все заботы бизнеса окупаются за простое работающее программное обеспечение, почему я должен тратить время на модульное тестирование простой «оболочки» vm, когда моя бизнес-логика уже модульно протестирована? Сколько времени бизнес действительно позволит мне потратить на милые анимации и цветовые схемы? Есть ли что-то, что осталось сделать младшему разработчику (отслеживание ошибки в функции сохранения, которая раньше смотрела на «Save_Click»,
По общему признанию, мне действительно нравится привязка данных WPF. Чтобы воспользоваться этим, я установил контекст данных для самого окна, где оно имеет доступ к бизнес-классу, а также к любым другим наблюдаемым свойствам. Да, я нарушаю почти все «правила» MVVM. Но, по крайней мере, у меня есть простой управляемый событиями код, который легко читать, и я получаю преимущества новой привязки и проверки данных. Проблема заключается в дизайнерах - которые я использую не так уж много, но надеюсь сейчас, что он лучше интегрирован в 2012 году - дизайнер показывает сотни свойств, которыми обладают окно и его базовые классы.
Для тех, кто может иметь отношение, можете ли вы указать мне на ресурсы, книги или даже просто изменения в перспективе, которые облегчили его проглатывание. Я еще раз попробую MVVM, но в прошлый раз я чувствовал себя довольно глупо из-за беспокойства по поводу внедрения зависимостей, просто чтобы показать окно сообщения от виртуальной машины, которое я не собирался тестировать. Даже если бы я проводил модульное тестирование, действительно ли мы получаем больше качества, торгуя во время выполнения тестирование на ошибки времени компиляции этих ужасно «тесно связанных» приложений?
Я понимаю, что один из ответов - просто оставаться в форме. Но, как один из последних сторонников веб-форм (у меня почти такая же критика тенденции веб-разработки), я чувствовал себя немного как динозавр, поскольку когда я обнаружил, что в сертификационных треках Microsoft больше не осталось веб-форм. Движение вперед - единственный вариант, даже если мне это не нравится.