Является ли текущая модель представления MVVM нарушением принципа единой ответственности?

В текущих практиках (по крайней мере, с WPF и Silverlight) мы видим представления, связанные с помощью привязок команд в модели представления, или мы, по крайней мере, видим события представления, обрабатываемые в моделях представления. Это кажется нарушением SRP , потому что модель представления не просто моделирует состояние представления, но реагирует на представление (пользователя). Другие спрашивали , как строить модели представления, не нарушая SRP , или спрашивали , делают ли их реализации так (последний является контроллером в MVC, но примерно аналогичен).

Таковы текущие практикует нарушение SRP? Или «модель представления» действительно набор вещей, не нарушающих SRP? Чтобы немного сформулировать это, кажется, нам нужно знать, что такое единственная ответственность, или, если в концепции есть несколько обязанностей, отдельные обязанности разделены в соответствии с SRP. Я не уверен.

В определении модели представления Википедии говорится

[T] Модель представления - это «Модель представления», означающая, что это абстракция представления, которая также служит для привязки данных между представлением и моделью

Это кажется достаточно хорошим для SRP, но тогда запись позже говорит (курсив мой)

[ViewModel] действует как связыватель / преобразователь данных, который преобразует информацию о модели в информацию о представлении и передает команды из представления в модель

В сообщении блога Prism о представлении роль модели, говорит автор (опять же, мой акцент)

Все сводится к тому, что модель представления является составной из следующих :

  • абстракции команд представления
  • преобразователи значений
  • состояние представления

Я уверен, что пропустил много определений, но они, похоже, попадают в следующие категории:

  1. Единственная «неопределенная» ответственность за моделирование состояния представления (так что же делать мы означает по состоянию)
  2. Множественные обязанности (состояние просмотра, взаимодействие с пользователем (т. Е. commands))
  3. Сочетание отдельных конкретных обязанностей (абстракция, состояние, взаимодействие, преобразование), таким образом имея единый ответственность: «управлять всем этим».

Если вам интересно, меня «волнует» это, потому что (2) кажется правильным, но кажется противоречащим преобладающим реализациям.

19
задан Community 23 May 2017 в 12:26
поделиться