У меня есть службы без сохранения состояния и объекты анемичного домена на стороне сервера. Модель между сервером и клиентом - POCO DTO. Клиент должен стать MVVM. Модель может быть графом около 100 экземпляров 20 различных классов. Редактор клиента содержит различные вкладки, все они в реальном времени связаны с моделью / моделью представления.
Моя проблема в том, как распространять изменения после обхода сервера хорошим способом. Очень легко распространять изменения из ViewModel в DTO. Для обратного пути можно было бы выбросить старый DTO и заменить его полностью новым, но это вызовет много перерисовок для списков / DataTemplates.
Я мог бы собрать изменения на стороне сервера и передать их на сторону клиента. Но имена измененных полей будут зависеть от домена / DTO, а не от ViewModel. И отображение мне кажется нетривиальным. Если бы я сделал это обязательным образом после кругового обхода, это нарушило бы SOC / модульность viewModels.
Я имею в виду какой-то механизм правил отображения, что-то вроде automappper или emit mapper. Но это решает только очень простые варианты использования. Я не вижу, как это будет отображать / распространять / преобразовывать добавление элементов в список или удаление. Как идентифицировать экземпляры в коллекциях, чтобы они могли объединять значения с существующими экземплярами. Кроме того, он должен распространять информацию о проверке / ошибке.
Может быть, я должен реализовать INotifyPropertyChanged на DTO и попытаться воспроизвести на нем события на стороне сервера? А потом привязать ViewModel к нему? Решит ли связывание проблемы с слиянием коллекций хорошим способом? Является ли EventAgregator из PRISM полезным для этого? Есть ли какой-либо компонент воспроизведения записи события?
Есть ли лучший клиентский шаблон для архитектуры с серверной логикой?