Mam usługi bezpaństwowe i obiekty domeny anemicznej po stronie serwera. Model pomiędzy serwerem a klientem to POCO DTO. Klient powinien stać się MVVM. Model może być wykresem około 100 przykładów 20 różnych klas. Edytor klienta zawiera różne strony z zakładkami, wszystkie z podłączonymi na żywo do modelu/viewmodel.Wzór MVVM: Aktualizacje programu ViewModel po obiedzie modelu modelu
Mój problem polega na tym, jak propagować zmiany po ładowaniu w obie strony. Bardzo łatwo jest przenosić zmiany z ViewModel na DTO. W drodze powrotnej można wyrzucić starego DTO i zastąpić go nowym, ale spowoduje to wiele przerysowań dla list/DataTemplates.
Mogłem zebrać zmiany po stronie serwera i przesłać je do strony klienta. Ale zmienione nazwy pól będą dotyczyły konkretnej domeny/DTO, a nie specyficznych dla ViewModel. Mapowanie wydaje mi się nietrywialne. Gdybym zrobił to w sposób imperatywny po podróży w obie strony, złamałoby to SOC/modularność viewModels.
Zastanawiam się nad jakimś silnikiem reguł mapowania, czymś w rodzaju automapppera lub emulatora. Ale rozwiązuje tylko bardzo proste przypadki użycia. Nie widzę sposobu, w jaki mapował/propagował/konwertował dodawanie elementów do listy lub usuwania. Jak zidentyfikować instancje w kolekcjach, aby scalić wartości z istniejącymi instancjami. Jak również powinien propagować informacje o walidacji/błędzie.
Może powinienem wdrożyć INotifyPropertyChanged na DTO i spróbować powtórzyć zdarzenia po stronie serwera? A następnie związać do niego ViewModel? Czy wiązanie rozwiązać problemy z kolekcją łączy się w miły sposób? Czy EventAgregator z PRISM jest do tego przydatny? Czy jest jakiś komponent zapisu nagrań zdarzenia?
Czy istnieje lepszy wzór po stronie klienta dla architektury z logiką po stronie serwera?
To jest moje domyślne podejście w tej sytuacji. Zazwyczaj aktualizacja po Save() jest wyzwalana przez zdarzenie serwera, każdy model może następnie aktualizować się ze zmian wywołanych zmianą DTO. –