Czy MVC jest wzorcem projektowym lub wzorcem architektonicznym

109

Według Sun i Msdn jest to wzorzec projektowy.

Według Wikipedii jest to wzorzec architektoniczny

W porównaniu do wzorców projektowych, wzorce architektoniczne mają większą skalę. (Wikipedia - wzorzec architektoniczny )

Czy jest to wzór architektoniczny, który ma również wzór projektowy?

Która z nich jest prawdziwa?

JCasso
źródło
1
Musi istnieć jedna prawdziwa odpowiedź ...
Mike G
według Dave'a z Product Madness, MVC to wzorzec projektowy, podobnie jak RobotLegs. : P
andygoestohollywood

Odpowiedzi:

56

MVC to bardziej wzorzec architektoniczny, ale nie do pełnego zastosowania. MVC dotyczy głównie warstwy interfejsu użytkownika / interakcji aplikacji. Nadal będziesz potrzebować warstwy logiki biznesowej, może jakiejś warstwy usług i warstwy dostępu do danych. To znaczy, jeśli jesteś w podejściu wielopoziomowym.


źródło
16
Tak, powiedziałbym, że MVC to wzorzec architektoniczny dla Twojego poziomu prezentacji.
murki
8
Zdecydowanie nie zgadzam się ze stwierdzeniem, że „MVC dotyczy głównie interfejsu użytkownika / warstwy interakcji aplikacji”. „M” / model w MVC to warstwa biznesowa, którą prawdopodobnie chciałbyś podzielić na wiele warstw.
mewm
Tak, ta odpowiedź jest błędna. MVC absolutnie nie dotyczy interfejsu użytkownika / interakcji. Możesz idealnie mieć mvc po stronie front-endu i back-endu, na początku widok był często po prostu html / js lub .jsp lub .phtml, a serwer definiuje kontroler i model. Przykład JSP (widok), JavaBeans (model), serwlet (kontroler). Ta sama koncepcja ze wszystkimi znanymi frameworkami php (symfonia, zend, ciasto itp.). Ale obecnie frameworki frontendowe wyglądają jak aplikacje zaplecza, a nowoczesne frameworki javascript używają mvc (html twój widok, kontroluj swój skrypt i
modeluj
40

Dlaczego jeden z nich musi być prawdziwy?

Oba mogą być prawdziwe, w zależności od punktu widzenia.

MVC może być wzorcem architektonicznym, jeśli stanowi podstawę architektury aplikacji.

Można go również postrzegać jako po prostu wzorzec projektowy, abstrakcyjne pojęcie, które ma zastosowanie do każdej aplikacji.

Oded
źródło
27

Wzorce projektowe mówią, jak efektywnie pisać kod (biorąc pod uwagę metryki kodu ).

Kilka korzyści:

  1. Łatwe w utrzymaniu
  2. Wysoka ponowna użyteczność
  3. Czytelne dzięki abstrakcji

Wzorce architektoniczne mówią, jak efektywnie wykorzystywać zasoby.

  1. Równoległe wykonywanie zadań, takich jak programiści i graficy, może działać równolegle.
  2. Do tworzenia oprogramowania można wykorzystać wiele technologii.

W MVC a). Widoki można tworzyć za pomocą szablonów javascript, a także można używać html b). Kontrolery można napisać .NET framework ic). Modele można pisać w Javie - można użyć usługi java, która zwraca tylko dane json.

We wzorcu projektowym nie można zaimplementować wzorca, w którym kod można napisać w wielu technologiach, takich jak klasa AdminUser w Javie, klasa Customer w C #, klasa Partners w PHP czy wzorzec fabryczny w Rubim :); hmmm… takie proste? :)

vrluckyin
źródło
6

Wiem, że udzielono na to odpowiedzi jakiś czas temu, ale nikt jeszcze nie wspomniał o książce, która rozsławiła MVC: Pattern-Oriented Software Architecture (POSA) autorstwa Buschmanna i innych, opublikowanej w 1996 roku. Chociaż nie jest tak szeroko czytana jak książka Wzorce projektowe , Gamma i wsp., POSA jest jedną z podstawowych książek używanych przez społeczność wzorców.

Aha, i POSA bardzo wyraźnie identyfikuje MVC jako wzorzec architektoniczny. Moje przeczucie jest takie, że MS i Sun są po prostu niechlujne i nazywają każdy wzór „wzorcem projektowym”.

Jan
źródło
3

Myślę, że oba są prawdziwe. Jeśli patrzysz na konkretną instancję MVC w frameworku takim jak Ruby on Rails, ta instancja jest bardziej wzorcem projektowym. Jeśli spojrzysz na MVC jako na ogólną koncepcję , jest to bardziej wzór architektoniczny.

Jim Ferrans
źródło
3

Wzorce projektowe wewnątrz triady klas Model / Widok / Kontroler (MVC) obejmują i nie mogą być ograniczone do:

  • Obserwator , odsprzęganie obiektów w taki sposób, że zmiany w jednym (modelu) mogą wpływać na dowolną liczbę innych (widoki) bez wymagania, aby zmieniony obiekt (model) poznał szczegóły innych (widoki).

  • Złożony , który pozwala nam traktować obiekt grupowy (widok złożony) tak samo, jak traktujemy jeden z jego pojedynczych obiektów (komponenty widoku).

  • Strategia , gdzie widok używa instancji podklasy kontrolera do implementacji określonej strategii odpowiedzi; Aby zaimplementować inną strategię, wystarczy zastąpić instancję innym rodzajem kontrolera.

  • Factory Method , określając domyślną klasę kontrolera dla widoku.

  • Dekorator , dodający przewijanie do widoku.


Odniesienie

  • Strony 4 do 6 (sekcja 1.2 Wzorce projektowe w Smalltalk MVC)
  • Strony od 293 do 304 (wzorzec projektowy obserwatora)
  • Strony 163 do 174 (wzorzec projektowy złożony)
  • Strony 315 do 324 (wzorzec projektowania strategii)
  • Strony 107 do 116 (wzorzec projektowy metodą fabryczną)
  • Strony 175 do 185 (wzorzec projektowy Dekorator)

Eric Gamma, Richard Helm, Ralph Johnson i John Vlissides. Wzorce projektowe: elementy oprogramowania obiektowego wielokrotnego użytku . Addison-Wesley, Reading, MA, 1994.

Jerzy
źródło
1
Dzięki, wszystkie inne odpowiedzi są błędne. Absolutnie nie jest to „zależne od punktu widzenia”, a kilkanaście lub setki głosów nie sprawi, że coś złego stanie się prawdą. MVC nie jest sam w sobie wzorcem projektowym, to sposób na architekturę kodu w 3 warstwach przy użyciu kilku wzorców projektowych, o których wspominasz. Wszystkie ramy, które implementują MVC za kulisami, używają koncepcji obserwowalnych, strategii i wzorca złożonego. Najlepszym sposobem na zrozumienie MVC jest stworzenie własnej implementacji, a następnie zrozumienie wzorców projektowych stojących za nimi.
amdev
2

MVC zawsze wspominano i wprowadzano jako warstwę prezentacji w książkach o architekturze oprogramowania.

Przeczytaj te książki:

  1. Projektowanie rozwiązań Microsoft.NET dla przedsiębiorstw (prasa Microsoft)

  2. Profesjonalne wzorce projektowe ASP.NET (Wrox)

  3. Wzorce rozwiązań dla przedsiębiorstw korzystających z Microsoft.NET (prasa Microsoft)

  4. Wzorce architektury aplikacji korporacyjnych (Addison Wesley)

  5. Praktyczny przewodnik po architekturze korporacyjnej (Prentice Hall)

Saleh Rahimzadeh
źródło
6
dlaczego 2 odpowiedzi? możesz dodać tę odpowiedź jako dodatkową notatkę do swojej pierwszej
frogatto,
2

Jeśli umieścisz dziesięciu architektów oprogramowania w jednym pomieszczeniu i poprosisz ich o omówienie wzoru Model-View-Controller, otrzymasz dwanaście różnych opinii. … Niektórzy z purystów nieuchronnie będą mieli skrupuły z tym, co nazywam „MVC”. Zapraszam do zostawienia ognistego komentarza na tablicy ogłoszeń u dołu tej strony internetowej. Chętnie przedstawię różne spojrzenia na to, co oznacza MVC, ale pamiętaj, że mnie to nie obchodzi.

Josh Smith

Saleh Rahimzadeh
źródło
1

Według Martina Fowlera są to architektury GUI: architektury Martina Fowlera-GUI

Zależy to od rozmiaru aplikacji, ponieważ wpływa tylko na klasy związane z GUI, w małej (głównie GUI) można to uznać za wzorzec architektoniczny, podczas gdy w ogromnym byłby to po prostu wzorzec projektowy, który zastosujesz do GUI kod (może to być 10% kodu aplikacji).

Iker Jimenez
źródło