Tagi na forum.

C# 1456 XML 282
SQL 1192 sieci 268
ASP.NET 785 IIS 262
Windows 726 C++ 255
web 608 Html 218
Visual Studio 515 Information Technology 193
SQL Server 425 MSDN 167

pokaż wszystkie tagi na forum

Wzorce MVVM oraz MVC

duszekmestre 2011-11-15 07:33:45
0
avatar
 
 

Nazwy rozumiem itp... mam jakby wątpliwości i chęć zrozumienia tych dwóch wzorców...

MVVM - Model - View - ViewModel... JA to rozumiem tak:

  • Model -  Nasze klasy, które przechowują pojedyncze elementy ale dostępu bezpośredniego do nich nie mamy
  • View - widok. Czyli jakby nasz UI. oraz code-behing, który jedynie pośrednia komunikuje się z Modelem za pomocą ViewModel...
  • ViewModel - komunikacja między Modelem i Widokiem... to on posiada kolekcje klas z Modelu oraz wszelkie operacje na nich

MVC - Model - View - Controler:

  • Model - j.w.
  • View - j.w.
  • Controler - też jakby pośrednik... ale jakiego rodzaju?

No i czy teraz mógłby ktoś rozjaśnić czy dobrze myślę? Oraz poszerzyć wiedzę...


tagi: mvc   MVVM


m.iwanowski  2011-11-15 15:23:54 #1
0
avatar
 
 

Szczerze można wchodzi tutaj w teoretyzowanie ale tak naprawdę nie jest to istotne. MVVM jest do XAML'a pod każdą postacią, MVC to Windows Forms ale częściej ASP.NET. I nie warto wnikać w to jak się nazywa wzorzec z którego aktualnie korzystasz, ważne żeby dobrze Ci się korzystało :) Często jeszcze powstają jakieś warjacje z tych wzorców i czy warto spędzać czas nad wymyślaniem nazwy na to?

Masz wątpliwość czym się tak naprawdę różni ViewModel od Controlera. A więc na mój rozum we wzorcu MVVM widok ZAWIERA ViewModel i komunikacja może następować zarówno z View do VM jak i na odwrót (VM może informować że coś się w nim zmieniło, zaś View mówi dla VM'a co ma wykonać). Przy kontrolerze tak nie jest, kontroler może ZWRÓCIĆ widok i ten widok może komunikować się z kontrolerem, ale kontroler już z widokiem nie bardzo.

Jak się w czymś pomyliłem to ktoś mnie poprawi - ale jeszcze raz podkreślę że nie warto w to wnikać, należy tworzyć architekturę tak żeby było jak najwygodnie dla programisty pisać kod i później nim zarządząc.


Pozdrawiam

Marcin Iwanowski

 

...::: Jeżeli mój post jest rozwiązaniem Twojego problemu, kliknij "Rozwiązanie" :::...

duszekmestre  2011-11-15 15:28:23 #2
0
avatar
 
 

Znaczy bo widzisz... tak sobie myślę, ze dobrze jest stosować jakiś konkretny wzorzez w odpowiednich wypadkach bo zwyczajnie uprzyjemna i przyspiesza pracę. W takim razie już rozumiem ;) spoko ;)


dstarkowski  2011-11-15 18:38:24 #3
0
avatar
 
 

Ja mogę spróbować wyjaśnić MVVM.

 

Tak jak zostało napisane, w aplikacji mamy wyróżnione 3 warstwy:

  • View - UI (XAML i CodeBehind) - powinien zawierać tylko elementy wizualne i logikę UI.
  • ViewModel - warstwa pośrednia.
  • Model - Dane (obiekty biznesowe i servicey) - odpowiada za reprezentację, pozyskanie i modyfikację danych.

 

W uproszczeniu, wzorzec opiera się na tym, że warstwy nie wiedzą o strukturze innych warstw i mogą komunikować się tylko z sąsiednią klasą. Przy czym:

  • ViewViewModel - nie mogą zawierać wzajemnych referencji. Komunikacja tylko przez DataBinding (ew. inne wzorce - messenger, event agregation).
  • ViewModelModel - model nie może zawierać referencji do VM, ale VM może zawierać referencję do modelu.
  • ViewModel - wszelka komunikacja jest zakazana.

 

Nie można powiedzieć, że View zawiera ViewModel. Jest to spore uproszczenie i odejście od głównej zasady (wiedza o strukturze innych warstw). Bo skoro View zawiera referencję, to zna typ (czyli strukturę) ViewModelu.

 

Początkowo zrozumienie tego może być trudne, ale z praktyką się rozjaśnia ;)


Edytowano 1 raz. Ostatnio 2011-11-15 18:39:29 przez dstarkowski.
Cybuch  2011-11-17 22:28:57 #4
0
avatar
 
 

Witam

Wiele koncepcji na temat tych dwóch wzorców w w/w postach nie jest prawidłowa. Przede wszystkim - WARTO! poznawać architektury trójwarstwowe, i znać ich idee. Nieznajomość MVC, czy MVP, i jednoczesne stosowanie wzorca powoduje stłumienie cech, które ono posiada (Testowalnosc, Elastycznosc, Rozszerzalnosc, itd.) Dodatkowo ViewModel, ktory jest "Modelem" zbindowanym do widoku, często posiadającym warstwę walidacji, nie jest w zadnym stopniu zwiazany z VM ze wzorca. Tak na prawdę MVVM jest szczególną odmianą MVP (model-view-presenter), której głównym założeniem jest odcięcie wszelkich zależności od widoku poprzez reprezentację w postaci interfejsu, który wprowadza modyfikacje na samym widoku. Prostymi słowami oznacza to, że jeżeli zastosowano poprawnie architekturę MVP(w szczegolnym wypadku MVVM), to możemy ten sam kod zastosowac dla roznych UI (Silverlight, WPF, itd). Zasada działania jest taka : Prezenter(ViewModel) korzysta, i modyfikuje model. Widok obserwuje ten stan, i jeżeli zobaczy zmianę stanu modelu, to się aktualizuje. Szczególny przypadek został opisany przez "dstarkowski". 

MVC - ma troche inne założenia. Wzorzec jest zdeterminowany na przypadki użycia - czyli na czynności wykonywane przez użytkownika końcowego. Kontroler zawiera zestaw takich czynności, i korzystając z modelu (zasobu danych, reprezentującego np. przez instancje klas) generuje widok. Tutaj mamy "twarde" połączenie widoku z kontrolerem (kontroler wywołuje widok), i nie jest już tak łatwo wrzucić inne UI do logiki kodu. Zyskujemy natomiast aplikację zdeterminowaną na przypadki użycia, a sam kod spełnia wszystkie zasady SOLID. Inaczej mówiąc - wszystko się dzieje w kontrolerze :)

 

 


Udziel odpowiedzi

avatar
Treść wpisu:

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.

Idź na górę strony