Шаблон MVVM: обновления ViewModel после Образцового распространения в прямом и обратном направлениях сервера

У меня есть сервисы не сохраняющие состояние и анемичные объекты области на стороне сервера. Моделью между сервером и клиентом является ПОСТЕПЕННО DTO. Клиент должен стать MVVM. Модель могла быть графиком приблизительно 100 экземпляров 20 различных классов. Клиентский редактор содержит разнообразные вкладки все они живо подключенные к model/viewmodel.

Моя проблема состоит в том, как распространить изменения после распространения в прямом и обратном направлениях сервера хороший путь. Довольно легко распространить изменения от ViewModel до DTO. Для пути назад было бы возможно выбросить старый DTO и заменить его целый новым, но это вызовет партию перерисовки для lists/DataTemplates.

Я мог собрать серверные изменения и передать их к стороне клиента. Но названия измененных полей были бы конкретным доменом/DTO, не конкретный ViewModel. И отображение кажется нетривиальным мне. Если бы я должен сделать это обязательный путь после распространения в прямом и обратном направлениях, это повредило бы SOC/modularity viewModels.

Я думаю о некотором механизме правила отображения, чем-то как automappper или испускаю картопостроитель. Но это решает просто очень простые примеры использования. Я не вижу, как это отобразило бы/распространило бы/преобразовало бы добавляющие объекты для списка или удаление. Как определить экземпляры в наборах, таким образом, это могло объединить значения с существующими экземплярами. Также это должно распространить информацию о проверке/ошибке.

Возможно, я должен реализовать INotifyPropertyChanged на DTO и попытаться воспроизвести серверные события на нем? И затем свяжите ViewModel с ним? Привязка решила бы проблемы со слияниями набора хороший путь? Полезен EventAgregator от ПРИЗМЫ для этого? Действительно ли там рекордное воспроизведение события компонента?

Есть ли лучший клиентский шаблон для архитектуры с серверной логикой?

7
задан Pavel Savara 13 April 2010 в 11:42
поделиться

1 ответ

Обычно я сохранял ссылку на DTO в своих классах моделей. Для нескольких моделей я гарантирую, что каждая модель знает, как создать себя из DTO, а также как сохранить себя с помощью вводимого «сохранителя» или другого объекта поставщика услуг. Перенос ссылки на DTO позволяет довольно легко при вызове Save() в модели изменить старый DTO в соответствии с моделью, прежде чем передать его обратно в службу.

Надеемся, что любые «обновления» других объектов после операции Save() могут быть переданы в другие DTO, которые затем должны быть загружены в соответствующие классы моделей, используемые вашей ViewModel.

Недостатком этого является то, что вам действительно нужно написать код отображения, но обычно это самая простая часть. Я не уверен, что это лучший способ сделать что-то, и я был бы признателен за чтение ответов других.

1
ответ дан 7 December 2019 в 20:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: