Нет!MVVM не нарушает SRP, (программист делает, lol!)
Нет причин, по которым при использовании шаблона MVVM необходимо игнорировать SRP.MVVM не означает, что существует только один класс модели, один класс модели представления и один класс представления.Конечно, если бы у вас был только один класс View, вы могли бы показать только один простой экран.
Те классы, которые находятся на уровне View, должны отвечать за одну вещь;делать, решать или содержать.Представление может состоять из нескольких вложенных представлений, чья работа состоит в том, чтобы выполнять определенные части взаимодействия пользователей.Рассмотрим базовую форму, она имеет сетку отображения, элементы в сетке можно редактировать, а также есть кнопка «Сохранить».
Основной вид будет контейнером для двух других видов;сетка данных (пользовательский элемент управления или что-то еще) и командный элемент управления.Затем сетка данных отвечает за выбор правильного дочернего представления для отображения данных;по сути это контейнер, который связывает данные.Представление для редактирования элементов является дочерним представлением таблицы данных, которое, в свою очередь, является дочерним по отношению к основному представлению.Наконец, командный элемент управления представляет собой набор кнопок (в данном случае одной), единственная обязанность которых состоит в том, чтобы подавать сигналы о том, что команды были введены пользователем.
Таким образом, представление редактирования (используется DataGrid).является агностиком в отношении того, что его использует, и несет одну ответственность;То же самое с командным управлением.Аналогично, DataGrid не заботится о том, кто его использует, а только то, что он может содержать представление редактирования (дочерний).Хороший SRP там.
ViewModels, чтобы соответствовать представлениям (и дочерним элементам), также ответственны за одну вещь.Edit View Model - это контейнер, к которому привязывается Edit View;он просто содержит поля данных, которые можно отображать / редактировать.Он не заботится ни о чем, кроме как сигнализировать об изменении одного из его свойств.Модель Представления Командной кнопки - класс, который делает вещи.Его команды привязаны к кнопкам, и он будет работать в зависимости от того, на что нажимает пользователь.Для работы он должен иметь доступ к другим частям ViewModel (ов).
На главной странице View Model есть другие дочерние представления.Он несет полную ответственность за инициализацию, создание всех необходимых экземпляров ViewModel и передачу параметров конструктора другим экземплярам ViewModel (скажем, модели представления Command Button, чтобы он знал, где получить данные для своей работы)
Это естественновтиснуть целую кучу функций в одну ViewModel, к которой привязан большой View.Но это не должно быть так, и SRP может поддерживаться в MVVM.
Основная цель MVVM - обеспечить тестируемый дизайн, уровень модели можно тестировать независимо, все классы в моделиможет легко следовать SRP.ViewModel может быть протестирована без необходимости просмотра;становится сложнее думать о SRP во ViewModel, но это, безусловно, выполнимо;просто не забывайте устраивать уроки, чтобы у них была только одна проблема.Представление обязательно должно быть разделено на ViewModels. Если вам повезет, то тестирование модели ViewModel сделает привязку представлений очень простой.Помните, что вы можете позволить каждому View-let придерживаться SRP быть частью более крупного конгломерата View (контейнер).
TL; DR?Чтобы ответить на ваш вопрос напрямую, View - это набор классов, который не нарушает SRP.Таким образом, когда ViewModel абстрагируется от View (s) (View-First), они также представляют собой набор классов, которые придерживаются хорошего SRP.