Moje własne implementacje MVVM są bardzo brzydkie (w dodatku nie używam Command, ani IoC i zjecie mnie żywcem), ale czasami warto rozplanować jednak aplikację w nieco bardziej sensowny sposób. Ale nie do końca wiem, kto za to powinien odpowiadać w pewnych sytuacjach.
- Mam aplikację, która co jakiś czas musi sobie zaktualizować widok, na podstawie prostego DispatcherTimera. ViewModel u mnie ma tego timera i aktualizuje swoją kolekcję, prosząc o to repozytorium. Dobrze? Czy też odwrotnie, repozytorium ma wymusić aktualizację ViewModelu?
- Ładuje się aplikacja i ma od razu pokazać ContentDialog, o ile została uruchomiona z odpowiednim parametrem. U mnie robi to widok - prosi ViewModel o dane, przekazuje do ContentPanelu, wyświetla. Tutaj powinienem sobie zrobić Messenger Pattern?
- Gdzieś w aplikacji coś się stało (przyszła wiadomość z zewnątrz) i musimy wyświetlić ContentDialog, do którego przekazujemy zupełnie nowy ViewModel. Jednocześnie "odbieracz" wiadomości z zewnątrz musi je ignorować, dopóki ContentDialog nie zostanie zamknięty. Znowu przekazywanie informacji pomiędzy warstwami, więc Messenger? Główny VM dostaje wiadomość, tworzy obiekt podrzędnego VM, wyświetla ContentDialog i przekazuje mu jego DataContext, czy jakoś inaczej?
- Dodatkowe utrudnienie: ContentDialog zwraca wynik. Główny VM odbiera wynik i przekazuje dalej.
- Dodatkowe utrudnienie do powyższego to oczywiście dostęp pomiędzy wątkami - obecnie mam globalny DispatcherHelper w aplikacji, z metodą RunOnUIThread() i brak pomysłu jak można by to zrobić bardziej sensownie.
- Nazewnictwo: w systemie istnieją urządzenia. Kontrolujemy pojawianie się nowych urządzeń i to, co one przesyłają do nas. Klasa, która to robi powinna nazywać się...? DeviceManager? Te Managery wszelkiej maści nie są zbyt pięknymi nazwami.