Dlaczego warto używać modeli widoku?

Jestem nowy w tworzeniu aplikacji internetowych za pomocą ASP.NET MVC. W rzeczywistości jestem raczej nowy w tworzeniu aplikacji internetowych, niezależnie od technologii.

Obecnie pracuję nad projektem, aby poznać ASP.NET Framework MVC lepszy. Podczas czytania NA SO I w innych miejscach w Internecie wydaje się, że konsensus jest taki, że widoki nigdy nie powinny zajmować się bezpośrednio obiektami biznesowymi (tj. obiektami implementującymi logikę biznesową i zawierającymi powiązane atrybuty). Zamiast tego należy używać modeli widoku. Jednak wprowadza to kilka problemów:

  • Gdzie umieścić kod weryfikacyjny?
  • muszę dodać kod do mapowania między obiektami biznesowymi a modelami widoku.

W rzeczywistości wydaje się to dość uciążliwe i nie widziałem, aby ktoś właściwie wyjaśniał, dlaczego to zły pomysł, przekazując obiekty biznesowe do widoków. Czy ktoś mógłby spróbować to wyjaśnić (lub wskazać dobre wyjaśnienie)?

Tylko Wyjaśnienie ; nie szukam przykładów jak rozwiąż dwa problemy z modelami widoku powyżej, ale po prostu wyjaśnienie, dlaczego w ogóle powinienem używać modeli widoku.

Author: Matt Kocaj, 2011-02-02

4 answers

Gdzie umieścić kod weryfikacyjny?

Na modelach widoku należy potwierdzić wszystko, co jest specyficzne dla aplikacji, na przykład data powinna być w kulturze formatu en-US, ....

Muszę dodać kod do mapowania między obiektami biznesowymi a modelami widoku.

Dlatego istnieją narzędzia takie jak AutoMapper .

Różne problemy pojawiają się, gdy używasz bezpośrednio modeli domeny w widokach:

  • The widoki mają określone wymagania dotyczące wyświetlania danych (lokalizacja/globalizacja), więc albo skończysz z kodem spaghetti w swoich widokach, albo umieścisz ten kod na swoich modelach, aby stały się mniej wielokrotnego użytku w innych aplikacjach, ponieważ zanieczyściłeś je konkretnymi prezentacjami]}
  • masz różne wymagania dotyczące walidacji w zależności od widoku. Weźmy na przykład przypadek dodawania i aktualizowania widoków. W widoku Dodaj właściwość Id nie będzie potrzebna i nie będzie wymagane, ponieważ będziesz wstawiać nowy element. W widoku aktualizacji właściwość Id będzie wymagana, ponieważ aktualizujesz istniejący element. Trudno byłoby poradzić sobie z tymi szczególnymi regułami walidacji bez modeli widoku.
  • Modele mogą zawierać właściwości takie jak IsAdmin i wtedy pozostawiam twojej wyobraźni implikację działania kontrolera o następującej sygnaturze:

    [HttpPost]
    public ActionResult CreateUser(BusinessObjectUser user) { ... } 
    

    Zakładając, że masz ukrytą tę właściwość z formularz bazowy przez nieuwzględnienie go.

  • modele biznesowe Nie zmieniają się często, podczas gdy interfejs użytkownika może zmieniać się częściej. Co jeśli klient poprosi Cię o podzielenie ekranu na dwie części? Zmienia się sposób prezentowania informacji i sposób ich formatowania. Jeśli używasz swoich Modeli bezpośrednio w widokach, spaghetiness Twoich widoków staje się coraz gorszy z każdą zmianą.
  • około 60% pytania, na które odpowiadam na StackOverflow w tagu asp. net-mvc nie zapytałbym, czy OP użyło modelu widoku.
 43
Author: Darin Dimitrov,
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
2018-06-08 05:50:33

Trzy powody, dla których warto używać modeli widoku:

Powód 1: Usuń logikę ze swoich poglądów

Powód drugi: bezpieczeństwo

Powód trzeci: luźne sprzężenie

Poniżej link może być przydatny: http://www.codeproject.com/Articles/223547/Three-reasons-to-why-you-should-use-view-models

 5
Author: Kumar Manish-PMP,
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-05-14 06:37:29

Po pierwsze, umożliwienie widokom bezpośredniego dostępu do obiektów biznesowych w ASP.NET MVC wprowadza pewne dodatkowe problemy związane z bezpieczeństwem. ASP.NET MVC robi wiele wiązań modelu dla ciebie, gdy użytkownik zamieszcza wartość z powrotem do kontrolera. To może otworzyć się na różnego rodzaju ataki. Wprowadzając Model widoku pomiędzy, możesz mieć pewność, że powiązane są tylko pola, które Cię interesują (ponieważ model widoku będzie zawierał tylko pola, na których Ci zależy).

Co do drugiego pytania:

Gdzie umieścić kod weryfikacyjny?

Używam DataAnnotations na moich ViewModels bezpośrednio. Co pozwala mi na wykorzystanie architektury walidacji modelu wbudowanej w ASP.NET MVC. Jeśli jest jakaś Walidacja poza tym zajmę się tym w moim kontrolerze.

Muszę dodać kod do mapy pomiędzy obiekty biznesowe i modele widoku.

Prawda. Ale używanie czegoś takiego jak AutoMapper może znacznie zmniejszyć ilość kodu kotła, który trzeba pisać ręcznie.

 3
Author: Justin Niessner,
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-02-02 19:36:57

MVC jest łatwy do zrozumienia i ma bardzo mało kosztów. Ale ci, którzy używali wzorca Model-widok-kontroler od jakiegoś czasu wiedzą, że nie jest idealny. Ani trochę. Ciekawą alternatywą jest wzór Model-View-ViewModel.

Ważne jest, aby zrozumieć, że wzorzec Model-View-ViewModel rozszerza wzorzec Model-View-Controller. Nie jest to dramatyczna zmiana paradygmatu, jeśli jesteś przyzwyczajony do MVC. Chociaż zalety MVVM są subtelne, są głębokie.

Jakie są niektóre z zalet MVVM nad MVC?

  1. lepsze rozdzielenie obaw
  2. Ulepszona Testowalność
  3. Transparentna Komunikacja
 0
Author: Thokozane Ngcobo,
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
2018-09-29 08:39:06