Jakie są główne zalety wzoru MVC w stosunku do starego wzoru 3-warstwowego

Rozważam użycie wzorca MVC w moim nowym projekcie i wyraźnie widzę główną zaletę, jaką jest możliwość umieszczenia warstwy danych (modelu) nieco bliżej warstwy prezentacji (widoku), co pozwoli na niewielki wzrost prędkości aplikacji. Ale czy oprócz wydajności stand point są jakieś inne zalety MVC nad wzorcem typu view-logic-data layered?

EDIT: Dla zainteresowanych właśnie wgrałem przykładowy kod PHP, który stworzony do testowania wykorzystania MVC. Celowo pominąłem wszystkie kontrole bezpieczeństwa, aby Kod był łatwiejszy do odczytania. Proszę nie krytykować go za bardzo, bo wiem, że mógłby być znacznie bardziej wyrafinowany i zaawansowany , ale mimo to-działa!!! Będę mile widziany pytania i sugestie: Oto link: http://www.sourcecodester.com/sites/default/files/download/techexpert/test_mvc.zip

Author: techexpert, 2011-01-01

4 answers

Rozdzielenie obaw, które jest cytowane jako zaleta MVC, jest w rzeczywistości również postępem systemu 3-warstwowego/3-warstwowego. Tam też logika biznesowa jest niezależna i może być używana z różnych warstw prezentacji.

Główną różnicą jest to, że w klasycznym MVC model może mieć odniesienie z powrotem do widoku. Oznacza to, że gdy dane są aktualizowane, model może przenieść te dane z powrotem do Prawdopodobnie wielu widoków. Najlepszym przykładem jest aplikacja desktopowa, w której dane są wizualizowane w na wiele sposobów. Może to być tak proste, jak Tabela i wykres. Zmiana w tabeli (która jest zmianą w jednym widoku) jest najpierw popychana przez kontroler do modelu, który następnie popycha go z powrotem do wykresu (drugi widok). Następnie Wykres aktualizuje się.

Ponieważ rozwój desktopów spada, wielu programistów zetknęło się z MVC tylko w niektórych wariantach internetowych, np. poprzez JSF w Java EE.

W tych przypadkach model prawie nigdy nie ma odniesienia do widoku. To jest ponieważ sieć internetowa opiera się głównie na żądaniach/odpowiedziach i po doręczeniu żądania serwer nie może wysłać dodatkowych informacji. Czyli aktualizacja przekazywana z modelu do klienta byłaby bez znaczenia. Z reverse ajax / comet to się zmienia, ale wiele webowych frameworków MVC nadal nie wykorzystuje tego w pełni.

Tak więc, w przypadku MVC opartego na sieci, typowy "trójkąt" między M, V i C jest tam mniejszy i że wariant MVC jest w rzeczywistości bliższy modelowi n-tier niż "prawdziwy" MVC jest.

Zauważ również, że niektóre frameworki web MVC mają pośrednią część pomiędzy M, V i C zwaną backing bean (Java/JSF) lub kod behind (ASP.NET). w JSF kontroler jest dostarczany przez framework, a Widok często nie wiąże się bezpośrednio z modelem, ale używa go jako pośrednika. Fasola zaplecza jest bardzo smukła i w zasadzie tylko wstępnie pobiera dane z modelu w jeden sposób i tłumaczy wiadomości specyficzne dla modelu (np. wyjątki) na wiadomości specyficzne dla widoku (np. jakiś tekst czytelny dla człowieka).

 42
Author: Arjan Tijms,
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-01-01 08:22:35

Obok

  • code reuse,
  • oddzielanie obaw,
  • mniej sprzężenia między warstwami,

Już wspomniane przez @ bakoyaro i @arjan

Myślę, że MVC jest lepszy niż trójwarstwowy w połączeniu z "convention over configuration" wzorzec . (np. "ruby on rails" lub "MVC dla asp.net").

Moim zdaniem ta kombinacja prowadzi do lepszej i łatwiejszej obsługi kodu .

W pierwszej kolejności sprawia, że nauka mvc-framework jest nieco trudniejsza, ponieważ musisz nauczyć się konwencji (Kontrolery a la wchodzą do folderu controllers i muszą być nazwane xxxxxcontroller)

Ale po nauczeniu się konwencji łatwiej jest utrzymać własny i obcy kod.

 6
Author: k3b,
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-01-01 09:16:20

Zapomnij o zwiększaniu prędkości aplikacji poprzez przejście do MVC. Największą zaletą jest łatwość ponownego użycia kodu. Po przejściu do MVC nie ma zależności od prezentacji danych lub przechowywania rzeczywistych danych.

Na przykład można napisać servlet, który serwuje się .strony jsp jako warstwa prezentacji jednego dnia, a następnego dnia napisz usługę internetową jako kolejną warstwę prezentacji do istniejącego modelu i kontrolera. Jak mądry, jeśli chcesz lub musisz zmienić swój DBMS. Ponieważ dostęp do modelu jest całkowicie oddzielony od wszystkiego innego, wystarczy ponownie zapisać tylko obiekty dostępu do danych, aby zwrócić dane w sposób, w jaki kontroler może je obsłużyć.

Dzieląc obawy na 3 różne części, ułatwiasz również prawdziwe testy jednostkowe. Twoja warstwa prezentacji może być testowana bez modelu lub kontrolera i vice-a-versa.

Na marginesie, często czułem, że skrót MVC był niedokładny. Ilekroć to widzę, myślę o to jako widok - > kontroler - > Model . Warstwa prezentacji nigdy nie będzie miała kodu DAO, a model nigdy nie będzie miał w sobie logiki prezentacji. Kontroler jest zmuszony działać jako pośrednik.

 2
Author: bakoyaro,
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-01-01 07:26:33

Gdzie 3-warstwowy oddziela prezentację od biznesu i dostępu do danych, MVC jest wzorcem warstwy prezentacji, który dodatkowo oddziela Model (dane) od widoku (ekranu) i kontrolera (wejścia).

Nie ma wyboru MVC nad 3-warstwowym/3-warstwowym. Użyj obu.

 0
Author: SuperGirl,
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
2017-04-26 08:14:27