ASP.NET model MVC vs ViewModel

OK, słyszałem dyskusję na temat "ViewModels" w odniesieniu do MS ASP.NET MVC.

To ma być specyficzny Model, prawda? Nie jest to specyficzny Widok.

Według mnie jest to rodzaj modelu, który ma określony cel interakcji z widokiem? Czy coś w tym stylu?

Pewne wyjaśnienie byłoby mile widziane.

Author: Qcom, 2010-10-31

5 answers

Zasadniczo Model i model widoku są prostymi klasami z atrybutami.

Głównym celem tych klas jest opisanie ("Modelowanie") obiektu dla swoich odbiorców, które są odpowiednio kontrolerem i widokiem.

Więc masz całkowitą rację, kiedy mówisz

Według mnie jest to rodzaj Model, który ma określony cel interakcja z widokiem

Tak więc, podczas gdy klasy modelu są efektywnie domenowymi encjami modele widoku, z którymi współpracuje aplikacja, to proste klasy, z którymi współgrają widoki.

Mam nadzieję, że pomoże:)

Update :

Microsoft opracował wyspecjalizowaną wersję wzorca prezentacji autorstwa Martina Fowlera w dużej mierze opartą na modelu-View-Controller i nazwał go Model-View-ViewModel (MVVM) dla aplikacji PF. Ten wzór jest skierowany do nowoczesnych platform programistycznych UI, gdzie deweloperzy UI mają różne wymagania oparte bardziej na biznesie logika niż tradycyjni deweloperzy. Zobacz tutaj dla odrobiny teorii

 57
Author: Lorenzo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-31 01:42:00

Mówiąc najprościej, lubię myśleć o następującej rzeczy:

Model: ściśle wygląda i czuje się jak twój model danych. Pod każdym względem jest to tylko Klasa reprezentująca twój model danych. Nie ma wiedzy o Twoim widoku ani żadnych elementów w Twoim widoku. To powiedziawszy, nie powinno zawierać żadnych dekoratorów atrybutów (tj.), które wykorzystałbyś do swojego poglądu.

Model widoku: służy jako segregator danych między widokiem A twój Model i w wielu przypadkach jest również owijką dla Twojego modelu. Byłby bezużyteczny bez widoku, więc zazwyczaj nie nadaje się do wielokrotnego użytku w wielu widokach i kontrolerach, jak standardowy Model.

Jako przykład, model może mieć następujące właściwości, które są bezpośrednimi reprezentacjami źródła danych:

    public string FirstName { get; set; }
    public string LastName { get; set; }

Teraz, ponieważ twój model widoku jest powiązany z Twoim widokiem, może mieć następującą właściwość-która łączy pola FirstName i LastName modelu pole razem jako jeden ciąg znaków:

    [Display(Name = "Customer Name")]                
    public string CustomerFullName { get { return String.Format("{0} {1}", myModel.FirstName, myModel.LastName) }}
 53
Author: Jason Marsell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-14 23:24:26

Uważam ten artykuł za bardzo przydatny zasób do zrozumienia, w jaki sposób "model domeny" i "model widoku" współdziałają w ramach aplikacji MVC, szczególnie w odniesieniu do wiązania. Najlepsze ze wszystkich zawiera przykłady zamiast abstrakcyjnych opisów.

"od czasu wydania MVC zaobserwowałem wiele zamieszania na temat tego, jak najlepiej konstruować modele widoku. Czasami to zamieszanie nie jest bez powodu, ponieważ nie wydaje się być mnóstwo informacji na temat najlepszych praktyk zalecenia. Dodatkowo, nie ma "jednego rozmiaru dla wszystkich" rozwiązanie, które działa jak srebrny pocisk. W tym poście opiszę kilka głównych wzorców, które pojawiły się i wady każdego z nich. Ważne jest, aby pamiętać, że wiele z tych wzorców wyłoniło się z ludzi rozwiązujących rzeczywiste problemy."

Http://geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx

 24
Author: misteraidan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-03 01:50:49

WikiPedia ma pełniejszy opis Model vs. ModelView niż dostaniesz w Tak odpowiedzi: http://en.wikipedia.org/wiki/Model_View_ViewModel

Cytuję:

Model: podobnie jak w klasycznym wzorcu MVC, model odnosi się do (A) modelu obiektowego, który reprezentuje rzeczywistą zawartość stanu (podejście obiektowe), lub (b) warstwy dostępu do danych, która reprezentuje tę zawartość (podejście zorientowane na dane).

Widok: jak w klasycznym MVC wzorzec, widok odnosi się do wszystkich elementów wyświetlanych przez GUI, takich jak przyciski, okna, grafika i inne elementy sterujące.

ViewModel: ViewModel jest "modelem widoku", co oznacza, że jest abstrakcją widoku, która służy również w powiązaniu danych między widokiem a modelem. Może być postrzegany jako wyspecjalizowany aspekt tego, co byłoby kontrolerem (we wzorze MVC), który działa jako segregator/konwerter danych, który zmienia informacje o modelu w informacje widoku i przekazuje polecenia z widoku na Model. Model widoku wyświetla właściwości publiczne, polecenia i abstrakcje. ViewModel został porównany do stanu pojęciowego danych w przeciwieństwie do rzeczywistego stanu danych w modelu.

 16
Author: Ian Mercer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-14 09:29:13

Istnieje pojęcie ViewModel, ale nie jest ono ogólnie związane z Asp.net MVC. MVC używa wzorca kontrolera widoku modelu, gdzie kontroler obsługuje interakcje, gromadzi dane z modelu, a następnie przekazuje je do widoku w celu wyświetlenia.

ViewModels (i Model View ViewModel pattern) jest bardziej ogólnie kojarzony z Silverlight i WPF. Xaml jest nieco inny, ponieważ widoki mogą tworzyć dwukierunkowe wiązanie z modelami widoku, więc technologia jest trochę inaczej. Na przykład, jeśli pole tekstowe zostanie powiązane z polem, podczas wpisywania do niego wartość pola zostanie dynamicznie zaktualizowana. Tego rodzaju interakcja nie jest tak naprawdę możliwa na stronach internetowych, ponieważ strony internetowe są bezpaństwowe.

Podobieństwo obu wzorców polega na tym, że oba próbują oddzielić logikę od wyświetlacza. Najczęstszym zastosowaniem / powodem tego jest testowanie: chcesz być w stanie wykonać z kodu (poprzez framework testowy) wszystkie interakcje, które użytkownik będzie wywołanie przez interfejs użytkownika.

 5
Author: Travis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-31 01:48:55