Komunikacja pomiędzy ViewModelami

Komunikacja pomiędzy ViewModelami
grzesiek51114
grzesiek51114
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 4 lata
  • Postów:2442
0

Cześć,

krótko:

Najlepszy sposób na zapewnienie komunikacji pomiędzy VM w mvvm przy użyciu mediatora?

  • Static mediator;
  • Singleton mediator;

Tutaj np. autor rekomenduje czysto statyczną klasę: https://code.msdn.microsoft.com/The-Mediator-Pattern-c2c07b54
Ale... w wielu przypadkach widziałem w takiej roli singletony.

Co radzicie? Które podejście lepsze? Które ładniejsze? Czy może wszystko jedno, bo to właściwe tak naprawdę to samo? ;)

edytowany 2x, ostatnio: grzesiek51114
CF
Looknij na MVVMLight i ich messengera.
neves
  • Rejestracja:prawie 22 lata
  • Ostatnio:około 22 godziny
  • Lokalizacja:Kraków
  • Postów:1114
0

yyyy, aaaa, a od kiedy to dwa równorzędne VM mają potrzebę ze sobą rozmawiania - to mi brzydko pachnie, no chyba że chodzi o VM w relacji ojciec - syn.


grzesiek51114
grzesiek51114
Chodzi o przekazanie danych pomiędzy vm okna głównego, a vm okna np. dialogowego.
T9
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 6 lat
  • Postów:329
0

@up jeśli przez okno dialogowe rozumiesz ShowDialog() to i tak nie da się nic kliknąć w oknie głównym, wiec wystarczy return i konstruktor.
Jeśli chodzi o coś takiego co podałeś w linku, czyli np. w oknie pobocznym coś się pobiera/instaluje, a w głównym dostajesz informacje, to singleton ma taką zaletę że można łatwo dodać kolejne instancje, a statycznie łatwiej zgrupować dane. Np. nagle okazuje się że chcesz pobierać niezależnie 2 rzeczy naraz i w oknie głównym obok siebie mają być niezależnie wypisane postępy , z singletonowi można dopisać drugą instancje i po problemie, statycznie było by to problematyczne. Z strony jeśli program ma stwarzać tylko pozory niezależnej pracy a po wszystkim i tak wrzucasz wszystko do jednego worka, to statycznie jest lepiej to łatwe do zrobienia, a wymiana i synchronizacja danych miedzy x - singletonami jest problematyczna.

edytowany 1x, ostatnio: topik92
grzesiek51114
grzesiek51114
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 4 lata
  • Postów:2442
0

Dependency injection chyba jednak najlepiej się do tego sprawdza :)

T9
  • Rejestracja:około 10 lat
  • Ostatnio:prawie 6 lat
  • Postów:329
0

@grzesiek51114 W książce "Effective c# 50 specific ways to improve your c#" jest rodział "Express Callbacks with Delegates" i tam piszą by komunikacje ojciec syn realizować za pomocą delegat i w sumie to super pomysł, przekazujesz jako parametr funkcje anonimową i załatwione. Żadnych zmiennych globalnych/statycznych, ani łamiesz enkapsuacji a równocześnie po obu stronach możesz pracować na zmiennych prywatnych. Jestem Ciekaw jak to w praktyce wyjdzie :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.