Я продолжаю бороться с паттерном MVVM и, пытаясь создать практический дизайн для небольшого / среднего проекта, столкнулся с рядом проблем. Одна из этих проблем заключается в том, чтобы выяснить, как получить преимущества от развязки с этим шаблоном, не создавая много повторяющегося и сложного в обслуживании кода.
Моя текущая стратегия заключается в создании «богатых» классов модели. Они полностью осознают, что будут использоваться шаблоном MVVM, и реализуют INotifyPropertyChanged, позволяют наблюдать за своими коллекциями и знают, что за ними всегда можно наблюдать. Мои классы ViewModel, как правило, тонкие, открывают свойства только тогда, когда данные действительно нуждаются в преобразовании, причем большая часть их кода является обработчиками RelayCommand. Представления успешно привязываются либо к ViewModels, либо к моделям напрямую, в зависимости от того, требуется ли какое-либо преобразование данных. Я использую AOP (через Postsharp), чтобы облегчить боль в INotifyPropertyChanged, облегчая таким образом все мои классы моделей «обогащенными».
Существуют ли существенные недостатки при использовании этого подхода? Могу ли я предположить, что ViewModel и View настолько тесно связаны, что, если мне нужно новое преобразование данных для View, я могу просто добавить его в ViewModel по мере необходимости?