@ Р.С. Конли дает очень широкое объяснение этой теме, и я согласен с большинством.Единственное, что я думаю по-другому, это в нижней строке.
MVVM - это архитектура для 95% приложений в WPF.
Выбор любой другой архитектуры означает выборто, что меньше, чем лучшее, что вы можете получить.В ситуации RS Conley пассивный просмотр может быть лучшим способом, но это далеко от обычного случая.
Чтобы понять, насколько MVVM лучше, давайте посмотрим, что онпроигрыш во время подхода PassiveView.
Поддержка
В пассивном представлении ViewModel знает о IView, что означает, что SRP (принцип единой ответственности) не сохраняется,Контроллер в PassiveView напрямую взаимодействует как с моделью, так и с представлением, и поэтому выполняет две совершенно разные вещи! .
Под MVVM ViewModel, которая является сердцем только приложенияесть одна проблема, которая должна содержать состояние и логику приложения.Поддержка такого кода действительно превосходно по сравнению с PassiveView, MVP или MVC.
Это правда, что PassiveView лучше, когда речь идет об автоматизированном тестировании Coverege, но ИМХО, хорошая поддерживаемость кода гораздо важнее.Тестируемость помогает вам удостовериться, что вы не нарушаете свой код, в то время как Maintainability помогает вам не создавать проблемный код для начала.
Когда дело доходит до Maintainability, MVVM и PresentationModel являются evolotion предыдущих архитектур пользовательского интерфейса, и это потому, что принцип SRP поддерживается очень строго.Напишите достаточно кода в MVVM, и вы поймете, что я имею в виду.
Смешиваемость
Еще одна особенность, в которой MVVM действительно сильна, это Смешиваемость.Так как все состояние приложения сохраняется в ViewModel, легко подделать данные за время разработки, что позволяет значительно повысить производительность.Это невозможно создать в PassiveView, MVP или MVC, поскольку во всех этих архитектурах контроллер должен активно помещать данные в представления.В MVVM данные просто «перепрыгивают» в представление и поэтому могут быть имитированы.
Тестируемость
Это действительно место, где PassiveView превосходит MVVM.Если покрытие пользовательского интерфейса на 100% модульных тестов имеет решающее значение для вас, то это большое дело.В большинстве случаев, однако, покрытие, которое MVVM предоставляет вам, более чем достаточно, и вы обычно добавляете еще один уровень тестирования, используя регулярное тестирование пользовательского интерфейса (что, в конечном итоге, вы бы также сделали в PassiveView).
Я думаю, что тестируемость является менее важной из трех функций.Сортировка по важности - это ремонтопригодность, смешиваемость и тестируемость.
Где MVVM не правильный выбор?
Я принимал участие в ~ 15 WPF & Silverlight ProjectsВ прошлом году все, что MVVM подходят идеально.Я думаю, что в местах, где логика представления чрезвычайно велика, например, в играх, MVVM может быть неправильным выбором.Кроме игр, я не могу придумать категорию приложений, которая лучше всего не подходит для MVVM, кроме особых ситуаций, таких как RS Conley.