Architektura n-warstwowa MVC Vs

142

Zastanawiałem się, jaka dokładnie jest różnica między MVC (który jest wzorcem architektonicznym) a architekturą n-warstwową dla aplikacji. Szukałem tego, ale nie mogłem znaleźć prostego wyjaśnienia. Być może jestem trochę naiwny, jeśli chodzi o koncepcje MVC, więc jeśli ktoś może wyjaśnić różnicę, byłoby świetnie.

Twoje zdrowie

Arnkrishn
źródło

Odpowiedzi:

94

Architektura N-warstwowa zwykle ma każdą warstwę oddzieloną siecią. IE warstwa prezentacji znajduje się na niektórych serwerach internetowych, następnie komunikuje się z serwerami aplikacji zaplecza przez sieć w celu uzyskania logiki biznesowej, a następnie komunikuje się z serwerem bazy danych, ponownie przez sieć, i być może serwer aplikacji wywołuje również niektóre usługi zdalne ( powiedzieć Authorize.net do przetwarzania płatności).

MVC to programistyczny wzorzec projektowy, w którym różne części kodu są odpowiedzialne za reprezentowanie modelu, widoku i kontrolera w niektórych aplikacjach. Te dwie rzeczy są ze sobą powiązane, ponieważ na przykład warstwa Model może mieć wewnętrzną implementację, która wywołuje bazę danych do przechowywania i pobierania danych. Kontroler może znajdować się na serwerze internetowym i zdalnie wywoływać serwery aplikacji w celu pobrania danych. MVC wyodrębnia szczegóły implementacji architektury aplikacji.

Warstwa N odnosi się tylko do fizycznej struktury implementacji. Te dwa są czasami mylone, ponieważ projekt MVC jest często implementowany przy użyciu architektury N-warstwowej.

Zak
źródło
56
N-warstwowy to również wzorzec projektowy, nie potrzebujesz 3 serwerów, aby stworzyć system trójwarstwowy, w rzeczywistości możliwe jest wykonanie systemu wielowarstwowego przy użyciu jednego pliku, oddzielając każdą warstwę koncepcją koncepcyjną.
magallanes
6
Warstwa zasadniczo oznacza, że ​​komunikacja międzyprocesowa odbywa się zwykle przez łącze sieciowe. Nie zgadzam się, że przepływ projektowania kodu w trakcie (nie mówiąc już o tym samym pliku) stanowi warstwowe podejście do projektowania. Oczywiście to jest IMHO. „Serwer” oznacza, że ​​maszyna może uruchamiać kilka procesów na tym samym komputerze; i prawdopodobnie mogą nawet nadal rozmawiać w sieci „localhost”.
Zak,
2
Wszystkie omówione formaty są przykładami projektów trójwarstwowych. Nie należy mylić różnicy między warstwą a warstwą. Prawdą jest, że możesz uruchomić więcej niż jedną warstwę na fizycznym mahcine (np. Dzielisz duży serwer przez hiperwizory), ale chodzi o to, że N-Tier odnosi się do fizycznego przeskoku w sieci (np. TCP / IP). Lokalnie skuteczniej byłoby używać nazwanych potoków, ale znowu, jeśli używasz tego samego systemu, konkurujesz o pamięć i moc obliczeniową. Wszystko to jest powodem, dla którego warto rozważyć wyodrębnienie prezentacji, logiki biznesowej i dostępu do danych oraz bazy danych na różnych komputerach.
Zack Jannsen,
1
Polecam każdemu, kto czyta to pytanie, aby przeczytał inne odpowiedzi, ta odpowiedź jest niedokładna
keisar
@magallanes, idź z 'Zak', najpierw musimy wyjaśnić różnicę między warstwą a warstwą Oto bardzo dobry artykuł o projekcie kodu, w którym jest jasne wyjaśnienie
Irf
42

Gdyby projekt trójwarstwowy wyglądał tak:

Client <-> Middle <-> Data

wzór MVC wyglądałby następująco:

     Middle
     ^    |
     |    v
Client <- Data

Co oznacza:

  • w 3-warstwowym odpowiedniku komunikacja między warstwami jest dwukierunkowa i zawsze przechodzi przez warstwę środkową
  • w odpowiedniku MVC komunikacja jest jednokierunkowa ; moglibyśmy powiedzieć, że każda „warstwa” jest aktualizowana przez tę po lewej i z kolei aktualizuje tę po prawej - gdzie „lewa” i „prawa” są jedynie ilustracyjne

PS klient byłby Zobacz i Bliski Controller

unieważnić
źródło
13
czy w MVC model może współdziałać bezpośrednio z klientem (widok) ??? Nie sądzę!
palAlaa
6
@Alaa, zgadzam się i dlatego myślę, że chodzi o przepływ danych. Aktualizacja: Właśnie sprawdziłem w Wikipedii i Model może wchodzić w interakcje z Widokiem za pośrednictwem obserwatorów (nie bezpośrednio).
nieważne
1
W MVC: Architektura MVC jest trójkątna: widok wysyła aktualizacje do kontrolera, kontroler aktualizuje model, a widok jest aktualizowany bezpośrednio z modelu W trzech warstwach: architektura trójwarstwowa to warstwa klienta nigdy nie komunikująca się bezpośrednio z warstwą danych W modelu trójwarstwowym cała komunikacja musi przechodzić przez poziom środkowy
ketan italiya
1
Tutaj, jeśli Środek jest kontrolerem, wówczas komunikacja między Środkiem, Klientem i Środkiem, Dane jest dwukierunkowa, a nie jednokierunkowa, jak opisano w an. Kontroler przekazuje dane do modelu, a model zwraca zaktualizowane dane do kontrolera, który następnie zwraca je do przeglądarki po przejściu przez widok.
Dragon
30

Oto, co można powiedzieć o architekturze n-warstwowej

Na pierwszy rzut oka te trzy poziomy mogą wydawać się podobne do koncepcji MVC (Model View Controller); jednak topologicznie są różne. Podstawową zasadą w architekturze trójwarstwowej jest to, że warstwa klienta nigdy nie komunikuje się bezpośrednio z warstwą danych; w modelu trójwarstwowym cała komunikacja musi przechodzić przez warstwę oprogramowania pośredniego. Koncepcyjnie architektura trójwarstwowa jest liniowa. Jednak architektura MVC jest trójkątna: widok wysyła aktualizacje do kontrolera, kontroler aktualizuje model, a widok jest aktualizowany bezpośrednio z modelu.

Xinus
źródło
11
Brzmi dobrze, ale nie wierzę, że „widok jest aktualizowany bezpośrednio z modelu” to dobry pomysł. Nie ma sensu używać kontrolera do aktualizacji i wstawiania, ale nie do selekcji i filtrów, i nie widzę sensu oddzielania obaw tylko po to, aby powiązać widok z modelem! Wniosek - MVC to kolejne z tych zaciemnień stworzonych przez ... zgadnij. Nie przypominam sobie, żeby trójwarstwowy kiedykolwiek był ograniczony do „architektury systemu” lub „projektowania aplikacji”. Centralną koncepcją jest oddzielenie obaw .
Sam
1
To zależy od tego, co robisz. Aplikacja MVC dla aplikacji iOS (która prawdopodobnie nie pozwoliłaby na aktualizację widoku bezpośrednio z modelu) będzie inna niż aplikacja internetowa (co może). MVC to paradygmat, a nie absolutny sposób robienia rzeczy.
Dave Kanter
2
@Sam całkowicie się zgadzam. Za dużo żargonu dla intuicyjnej koncepcji.
smwikipedia,
1
brzmi dobrze, nie działa. Wikipedia nie jest ostatecznym źródłem prawdy
ACV
To sposób, w jaki interpretujesz prawdę, i znowu zależy to od twoich celów
Xinus,
17

Jedyne podobieństwo polega na tym, że te dwa wzory mają trzy pola na swoich diagramach. Zasadniczo mają one zupełnie inne zastosowanie. W rzeczywistości zwykle nie jest to wybór między wzorcem, który ma być użyty, ale oba wzory mogą być używane razem w harmonijny sposób. Oto dobre porównanie tych dwóch: http://allthingscs.blogspot.com/2011/03/mvc-vs-3-tier-pattern.html

allthingscs
źródło
3
Myślę, że jest to zdecydowanie najlepsza odpowiedź, zwłaszcza że MVC jest naprawdę skoncentrowany na interfejsie użytkownika i może to być twój poziom interfejsu użytkownika w projekcie trójwarstwowym. Diagram w linku bardzo dobrze to ilustruje.
Alex,
5

Podstawową zasadą w architekturze trójwarstwowej jest to, że warstwa klienta nigdy nie komunikuje się bezpośrednio z warstwą danych; w modelu trójwarstwowym cała komunikacja musi przechodzić przez warstwę oprogramowania pośredniego.

To architektura liniowa. Dotyczy to kwestii przekazywania informacji między użytkownikiem a bazą danych. Gdzie MVC jest architekturą trójkątną: widok wysyła aktualizacje do kontrolera, kontroler aktualizuje model, a widok jest aktualizowany bezpośrednio z modelu. Dotyczy to kwestii, w jaki sposób interfejs użytkownika zarządza komponentami na ekranie.

pooja gupta
źródło
5

@Cherry Middleware działa bardziej jak program obsługi żądań lub readresator we wzorcu MVC.

Chciałbym trochę wyjaśnić o MVC, Według mnie kontroler widoku modelu działa w ten sposób.

  1. Klient inicjuje sesję żądając dowolnej usługi.
  2. To żądanie jest odbierane i obsługiwane przez kontrolera (obsługę żądań, przekierowanie itp.)
  3. Administrator przetwarza podstawowe informacje na temat żądania i przekierowuje je do odpowiedniego Modelu, który może wypełnić żądanie danych.
  4. Model wypełnia żądanie zgodnie z parametrami przekazanymi przez Kontrolera i odsyła wyniki do Kontrolera. (Uwaga: w tym miejscu chciałbym wyjaśnić, że dane nie są zwracane bezpośrednio do klienta w prawdziwej architekturze MVC, a raczej są zapełniane i zwracane do kontrolera).
  5. Administrator niż wysyła te dane do View (Client).
  6. Klient ma przed sobą żądaną usługę.

To wszystko o MVC, które znam.

Aqeel Ahmad
źródło
1
Myślę, że, jak wspomniano powyżej, MVC jest trójkątny, więc Widok może czasami komunikować się bezpośrednio z Modelem i odwrotnie, jak wyjaśniono w tym dokumencie: msdn.microsoft.com/en-us/library/ms978748.aspx
ychaouche
5

Daj sobie spokój. I nie ograniczaj się do pewnych wzorców podczas rozwiązywania problemów w świecie rzeczywistym. Pamiętaj tylko o kilku ogólnych zasadach, z których jedną jest ROZDZIELANIE WĄTPLIWOŚCI .

smwikipedia
źródło
4

Poza tym, że jest liniowy, inną główną różnicą, która nie została tutaj wystarczająco podkreślona, ​​jest to, że w modelu N-warstwowym N niekoniecznie jest 3-warstwowe! Najczęściej jest wdrażany jako trzy warstwy (prezentacja, aplikacja, dane), przy czym warstwa środkowa ma dwie warstwy podrzędne (logika biznesowa i dostęp do danych). Ponadto model w MVC może zawierać zarówno dane, jak i logikę biznesową do manipulacji danymi, podczas gdy te byłyby w osobnych warstwach w n-warstwach.

Alkema
źródło
3

Architekturę N-warstwową najlepiej definiować za pomocą diagramu wdrażania.

Architekturę MVC najlepiej definiować za pomocą diagramu sekwencji.

Te 2 nie są takie same i nie są ze sobą powiązane i można łączyć ze sobą obie architektury. Wiele firm podjęło kroki w celu stworzenia architektury N Tier'd nie tylko w celu wdrożenia i skalowalności, ale także w celu ponownego wykorzystania kodu.

Na przykład obiekty jednostki biznesowej mogą wymagać użycia przez aplikację klasyczną, usługę internetową udostępnioną klientowi, aplikację internetową lub aplikację mobilną. Samo użycie podejścia MVC w ogóle nie pomoże w ponownym użyciu niczego.

Ed DeGagne
źródło
Jeśli mvc nie używa niczego ponownie dla danego scenariusza, to czy są jakieś korzyści z mvc w porównaniu z n tier arch.
Dragon
2

Wniosek: N-warstwowa to architektura, MVC to wzorzec projektowy. To ta sama metafora stosowana w dwóch różnych dziedzinach.

ychaouche
źródło
1

Jerry: Oto prosty przykład tego, jak te dwa elementy są powiązane:


Poziom 1 - składa się z modeli, które komunikują się z warstwą 2 za pośrednictwem jakiejś usługi sieciowej lub podobnej, kontrolerów obsługujących walidację danych wejściowych, obliczenia i inne rzeczy istotne dla widoków. I oczywiście zawiera same widoki - którymi może być GUI w aplikacji komputerowej lub interfejs sieciowy w aplikacji internetowej.


Poziom 2 - Zawiera jakąś usługę lub inny sposób odbierania wiadomości z Poziomu 1. Nie / nie powinien wiedzieć o Poziomie 1, więc może odpowiadać tylko na telefony z góry - nigdy nie pytaj o coś samodzielnie. Zawiera również całą logikę biznesową.


Warstwa 3 - zawiera model domeny, reprezentację obiektów bazy danych i całą logikę do komunikacji i aktualizowania wpisów w bazie danych.

Arve Systad
źródło
1

W modelu trójwarstwowym cała komunikacja musi przechodzić przez warstwę środkową. Koncepcyjnie architektura trójwarstwowa jest liniowa. Jednak architektura MVC [model-widok-kontroler] jest trójkątna: widok wysyła aktualizacje do kontrolera, kontroler aktualizuje model, a widok jest aktualizowany bezpośrednio z modelu.

hassan ketabi
źródło
Właściwie to nie jest MVC, to MVVMC. Widzę, że MVC lub MVVMC to tylko warstwa prezentacji, ponieważ widzę, że kontroler jest tylko oprogramowaniem pośredniczącym między widokami a BLL. W ten sposób bym go utrzymywał, aby móc używać BLL jako biblioteki do tworzenia interfejsu użytkownika dla różnych platform. To rodzaj aspx.cs z obsługą asmx. Czasami wydaje mi się, że MVC to zły sposób organizowania plików w folderze projektu, trochę trudny do zrozumienia, ponieważ wszystkie kontrolery będą na jednym poziomie, a widoki w podfolderach. Mogę również tworzyć podfoldery dla kontrolerów, ale jego zduplikowana praca.
Nithin B