Komunikacja pomiędzy ViewModelami

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? ;)

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.

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.

0

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

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 :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1