Komunikacja między view a controller w modelu MVC

0

Cześć!

Mam klasę view.xaml.cs a w niej event wywoływany przez naciśnięcie klawisza. Chcę, aby wewnątrz tego eventu została wywołana odpowiednia metoda z klasy controller.cs, która jednak nie ma (i nie może!) mieć instancji w klasie view.xaml.cs (i vice versa), więc nie mogę po prostu do eventu wrzucić powiedzmy: instancjaController.Metoda();. Klasa controller.cs nie może być również statyczna.

Próbowałam jakoś ugryźć temat korzystając z własnych eventów wywołując własny event wewnątrz eventu w klasie view.xaml.cs,który następnie byłby przechwytywany w controller.cs. Próba okazała się nieskuteczna, bowiem wymagałoby to obiektu klasy view.xaml.cs w klasie controller.cs, co nie jest możliwe.

Z góry dziękuję za odpowiedź!

0

Nieortodoksyjna myśl w środku nocy

Jak do weba dochodzą zdarzenia typu AJAX-owego, to "pożyteczny" wzorzec MVC pokazuje swój kres.
Pojawia się Trochę-Stan, naturalne by było go żenić z Modelem, a tak naprawdę Trochę-Modelem, ani to nie jest prawdziwy Controler który zmienia stan prawdziwego Modelu, tylko tak Trochę-Controler.

Do intensywnie ajaksujaych aplikacji (obserwacja na gruncie bardzie Javy niż .NET- tam jest bardziej zróżnicowany ekosystem, ale istota ta sama ) twórcy frameworku mogą

  • kłamać w zaparte, ze to nadal MVC (jak javowskie JSF)
  • określić framework jak MVVC
  • określić się "my jesteśmy podobni do" (np rozmowa z rdzeniowymi ludźmi Vaadin: jesteśmy podobni do MVVC, zarazem jesteśmy podobni do Wicket)
  • lub zdefiniować się w innym układzie współrzędnych, np jako stanowy (statefull) framework komponentowy (Apache Wicket)

Pora kończyć długi sarkastyczny post:
nie stawiaj sobie wysokich wymagań wpasowania się w model teoretyczny MVC, bo MSZ nie uda się w pelni nigdy

0

@AnyKtokolwiek: No dobrze, ale w praktyce mój problem tak naprawdę nie ogranicza się wyłącznie do MVC. To jest jeden z tych problemów, które ciągną się za mną od jakiegoś i zazwyczaj pokracznie łatam je półśrodkami - ale nie o to w tym przecież chodzi! Mój problem tak naprawdę dotyczy komunikacji międzyklasowej - co zrobić gdy klasa B chce coś przekazać klasie A, ale klasa A nie może mieć obiektu klasy B, więc nie może zasubskrybować eventu. Ba, klasa A nie może być nawet statyczna, więc nie można pójść na łatwiznę i wywołać metodę z klasy A w klasie B bez obiektu klasy A... Tutaj tak naprawdę jest pies pogrzebany. MVC w tym wszystkim jest tak naprawdę dlatego, żeby to ładnie wyglądało i było względnie zorganizowane.

0

@calineczka:

A gdyby stworzyć klasę C, która posłuży za pojemnik do wymiany czegoś i instancja będzie przekazana tylko do A i B?

2
  1. W MVC nie ma powiązania między widokiem a kontrolerem. Ty masz jakiś MVVM albo MVP.
  2. Należy się zastanowić, czemu A nie może mieć referencji do B, a B nie może mieć referencji do A. Prawdopodobnie problem rozwiąże się, gdy tylko uzmysłowimy sobie, że to nie jest prawda.
0

@WeiXiao: To jest patent jaki stosowałam w Javie... i w tym konkretnym przypadku nie zadziała - klasa B chce wywołać metodę w klasie A, więc owa klasa C musiałaby mieć metodę która, wywołuje metodę klasy A - no i jesteśmy w punkcie wyjścia: wymagałoby to instancji klasy A w klasie C, ponieważ klasa A nie jest i nie może być statyczna.

@somekind Przyznam, że nie słyszałam o takim patencie wcześniej i bardzo dziękuję za sugestię.

EDIT: Wszystko działa, dziękuję :)

0

Jakim patencie? Ja napisałem tylko, żeby się zastanowić.

1

@somekind: Referencja do obiektu wykorzystana w taki sposób. Wydaje się logiczne, ale nie pomyślałam o tym. Chociaż podejrzewam, że i to może się okazać niewykonalne, gdy nie mamy dostępu do konstruktora obiektu/ miejsca gdzie obiekt jest konstruowany. Ale to zupełnie inny temat.

0

Chyba rozumiem co zrozumiałaś. :P
No jeśli faktycznie nie ma dostępu do konstruktora/miejsca tworzenia, to można zrobić albo coś brzydkiego, albo wprowadzić jakąś pośrednią klasę. Np. ViewModel z MVVM.

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