MVC Vs architettura di livello n


142

Mi chiedevo quale fosse esattamente la differenza tra MVC (che è un modello architettonico) e un'architettura di livello n per un'applicazione. L'ho cercato ma non sono riuscito a trovare una semplice spiegazione. Forse sono un po 'ingenuo sui concetti di MVC, quindi se qualcuno può spiegare la differenza, sarebbe fantastico.

Saluti

Risposte:


94

L'architettura di livello N di solito ha ogni livello separato dalla rete. Ad esempio, il livello di presentazione si trova su alcuni server Web, quindi parla con i server delle app di back-end sulla rete per la logica aziendale, quindi parla con un server di database, sempre tramite la rete, e forse il server delle app chiama anche alcuni servizi remoti ( dire Authorize.net per l'elaborazione dei pagamenti).

MVC è un modello di progettazione di programmazione in cui diverse parti di codice sono responsabili della rappresentazione del modello, della vista e del controller in alcune applicazioni. Queste due cose sono correlate perché, ad esempio, il livello Modello potrebbe avere un'implementazione interna che chiama un database per l'archiviazione e il recupero dei dati. Il controller può risiedere sul server web e chiamare in remoto apperver per recuperare i dati. MVC estrae i dettagli di come viene implementata l'architettura di un'app.

Il livello N si riferisce solo alla struttura fisica di un'implementazione. Questi due sono talvolta confusi perché una progettazione MVC viene spesso implementata utilizzando un'architettura di livello N.


56
N-tier è anche un modello di progettazione, non è necessario 3 server per eseguire un sistema a 3 livelli, infatti è possibile eseguire un sistema a n livelli utilizzando un singolo file, separando ogni livello da un concetto concettuale.
magallanes,

6
Il livello implica sostanzialmente che si stia verificando una comunicazione tra processi Di solito attraverso un collegamento di rete. Non sono d'accordo sul fatto che un flusso di progettazione del codice in-process (per non parlare dello stesso file) costituisca un approccio di progettazione a più livelli. Certo che è IMHO. "Server" implica che la macchina può eseguire diversi processi sulla stessa scatola; e probabilmente possono anche ancora parlare sulla rete "localhost".
Zak,

2
Tutti i formati discussi sono esempi di progetti a 3 strati. Non confondere la differenza tra un livello e un livello. È vero che puoi eseguire più di un livello su un mahcine fisico (ad esempio, dividi un grande server tramite hypervisor), ma il punto qui è N-Tier alud a un hop di rete fisico (ad esempio TCP / IP). A livello locale sarebbe più efficace utilizzare pipe denominate, ma ancora una volta, se si esegue sullo stesso sistema, si è competitivi per la memoria e la potenza di elaborazione. Tutti questi sono i motivi per considerare di isolare la presentazione, la business logic e l'accesso ai dati e il database su macchine diverse.
Zack Jannsen,

1
Consiglierei a chiunque legga questa domanda di leggere altre risposte, questa risposta è inaccurata
keisar

@magallanes, vai con 'Zak', per prima cosa dobbiamo chiarire la differenza tra Livello e Livello Ecco un ottimo articolo codeproject in cui c'è una chiara spiegazione
Irf

42

Se un design a 3 livelli fosse così:

Client <-> Middle <-> Data

lo scalpiccio MVC sarebbe:

     Middle
     ^    |
     |    v
Client <- Data

Intendendo che:

  • nell'equivalente a 3 livelli, la comunicazione tra i livelli è bidirezionale e passa sempre attraverso il livello Medio
  • nell'equivalente MVC la comunicazione è in unidirezionale ; potremmo dire che ogni "livello" viene aggiornato da quello a sinistra e, a sua volta, aggiorna quello a destra, dove "sinistra" e "destra" sono puramente illustrativi

Il client PS sarebbe View e Middle il controller


13
in MVC il modello può interagire direttamente con il client (visualizza) ??? Io non la penso così!
PalAlaa,

6
@Alaa, sono d'accordo ed è per questo che penso si riferisca al flusso di dati. Aggiornamento: ho appena controllato su Wikipedia e il modello può interagire con View attraverso gli osservatori (non direttamente).
Vuoto il

1
In MVC: l'architettura MVC è triangolare: la vista invia aggiornamenti al controller, il controller aggiorna il modello e la vista viene aggiornata direttamente dal modello In tre livelli: un'architettura a tre livelli è il livello client non comunica mai direttamente con il livello dati In un modello a tre livelli tutte le comunicazioni devono passare attraverso il livello intermedio
ketan italiya,

1
Qui se Middle è un controller, le comunicazioni tra Middle, Client e Middle, Data sono bidirezionali e non unidirezionali come descritto in ans .. Il controller passa i dati al modello e il modello restituisce i dati aggiornati al controller, quindi li restituisce al browser dopo aver attraversato la vista.
Drago

30

Questo è ciò che dice sull'architettura di livello n

A prima vista, i tre livelli possono sembrare simili al concetto MVC (Model View Controller); tuttavia, topologicamente sono diversi. Una regola fondamentale in un'architettura a tre livelli è che il livello client non comunica mai direttamente con il livello dati; in un modello a tre livelli tutte le comunicazioni devono passare attraverso il livello middleware. Concettualmente l'architettura a tre livelli è lineare. Tuttavia, l'architettura MVC è triangolare: la vista invia aggiornamenti al controller, il controller aggiorna il modello e la vista viene aggiornata direttamente dal modello.


11
Suona bene, ma non credo che "la vista venga aggiornata direttamente dal modello" sia una buona idea. Non ha senso usare il Controller per aggiornamenti e inserimenti, ma non per selezioni e filtri, e non vedo il punto di separazione delle preoccupazioni solo per legare comunque la vista al modello! Conclusione - MVC è un altro di quegli offuscamenti creati da .... avere un'ipotesi. Non ricordo che il 3 ° livello sia mai stato limitato a "architettura di sistema" o "progettazione di applicazioni". Il concetto centrale è la separazione delle preoccupazioni .
Sam

1
Dipenderebbe da cosa stai facendo. Un'app MVC per un'applicazione iOS (che probabilmente non consentirebbe l'aggiornamento della vista direttamente dal modello) sarà diversa da un'app Web (che potrebbe). MVC è un paradigma, non un modo assoluto di fare le cose.
Dave Kanter,

2
@ Sam è totalmente d'accordo. Troppi gerghi per un concetto intuitivo.
smwikipedia,

1
suona bene, non funziona. Wikipedia non è l'ultima fonte di verità
ACV il

È il modo in cui interpreti la verità, e di nuovo dipende da quali sono i tuoi obiettivi
Xinus

17

L'unica somiglianza è che i due schemi hanno tre caselle nei loro diagrammi. Fondamentalmente sono completamente diversi nei loro usi. In realtà, di solito non è una scelta tra quale modello usare, ma entrambi i modelli possono essere usati insieme in modo armonioso. Ecco un buon confronto tra i due: http://allthingscs.blogspot.com/2011/03/mvc-vs-3-tier-pattern.html


3
Penso che questa sia di gran lunga la risposta migliore, soprattutto perché MVC è davvero focalizzata sull'interfaccia utente e può essere il tuo livello di interfaccia utente in un design a 3 livelli. Il diagramma nel link lo dimostra molto bene.
Alex,

5

Una regola fondamentale nell'architettura a tre livelli è che il livello client non comunica mai direttamente con il livello dati; in un modello a tre livelli tutte le comunicazioni devono passare attraverso il livello middleware.

È un'architettura di linea. Questo risolve la questione di come passare le informazioni tra un utente e un database. Laddove MVC è un'architettura triangolare: la vista invia aggiornamenti al controller, il controller aggiorna il modello e la vista viene aggiornata direttamente dal modello. Questo risolve le domande su come un'interfaccia utente gestisce i componenti sullo schermo.


5

@Cherry Middle ware funziona più come un gestore di richieste o redirector in MVC Pattern.

Vorrei spiegare un po 'di MVC, secondo me Model View Controller funziona in questo modo.

  1. Il client avvia la sessione richiedendo qualsiasi servizio.
  2. Questa richiesta è ricevuta e gestita dal controller (gestore richieste, redirector ecc.)
  3. Il responsabile del trattamento elabora le informazioni di base sulla richiesta e le reindirizza al Modello pertinente che può riempire la richiesta di dati.
  4. Il modello riempie la richiesta in base ai parametri passati dal controller e restituisce i risultati al controller. (Nota: qui mi piace chiarire che i dati non vengono restituiti direttamente al client nella vera architettura MVC, ma si riempiono e vengono restituiti al controller.)
  5. Titolare del trattamento che invia tali dati a Visualizza (client).
  6. Il cliente ha di fronte il servizio richiesto.

Questo è tutto su MVC che conosco.


1
Credo che, come detto sopra, MVC è di forma triangolare, quindi la vista a volte può parlare direttamente con il modello e viceversa, come spiegato in questo documento: msdn.microsoft.com/en-us/library/ms978748.aspx
ychaouche

5

Concediti una pausa. E non limitarti a determinati schemi quando risolvi i problemi del mondo reale. Ricorda solo alcuni principi generali, uno dei quali è SEPARAZIONE DEGLI INTERESSI .


4

Oltre ad essere lineare, un'altra grande differenza che non è stata enfatizzata abbastanza qui è che nel modello di livello N, N non è necessariamente a 3 livelli! Viene spesso implementato come tre livelli (presentazione, app, dati) con il livello intermedio con due livelli secondari (logica aziendale e accesso ai dati). Inoltre, il modello in MVC può contenere sia dati che logica di business per la manipolazione dei dati, mentre questi sarebbero in livelli separati in n-tier.


3

Un'architettura di livello N è meglio definita usando un diagramma di distribuzione.

Un'architettura MVC è meglio definita usando un diagramma di sequenza.

I 2 non sono uguali e non sono correlati e puoi combinare le due architetture insieme. Molte aziende hanno preso le misure necessarie per creare un'architettura di livello N non solo per la distribuzione e la scalabilità, ma anche per il riutilizzo del codice.

Ad esempio, potrebbe essere necessario che gli oggetti Entità aziendale vengano utilizzati da un'app desktop, un servizio Web esposto per un client, un'app Web o un'app mobile. Il semplice utilizzo di un approccio MVC non ti aiuterà a riutilizzare nulla.


Se mvc non sta riutilizzando nulla per il tuo scenario, allora ci sono dei vantaggi rispetto a mvc arch.
Drago

2

Conclusione: N-tier è un'architettura, MVC un modello di progettazione. Sono la stessa metafora applicata in due campi diversi.


1

Jerry: Ecco un semplice esempio di come i due sono correlati:


Livello 1 : è costituito da modelli che comunicano con il livello 2 tramite una sorta di servizio di rete o simili, controller per gestire la convalida dell'input, i calcoli e altre cose rilevanti per le viste. E contiene le viste stesse, ovviamente - che può essere la GUI in un'app desktop o l'interfaccia Web in un'app Web.


Livello 2 - Contiene una sorta di servizio o un altro modo di ricevere messaggi dal Livello 1. Non dovrebbe / non dovrebbe conoscere il Livello 1, quindi può solo rispondere alle chiamate dall'alto - non chiedere mai cose da solo. Contiene inoltre tutte le logiche aziendali.


Livello 3 : contiene il modello di dominio, la rappresentazione degli oggetti del database e tutta la logica per comunicare e aggiornare le voci del database.


1

In un modello a tre livelli tutte le comunicazioni devono passare attraverso il livello intermedio. Concettualmente l'architettura a tre livelli è lineare. Tuttavia, l'architettura MVC [model-view-controller] è triangolare: la vista invia aggiornamenti al controller, il controller aggiorna il modello e la vista viene aggiornata direttamente dal modello.


In realtà non è MVC, è MVVMC. Vedo che MVC o MVVMC è solo un livello di presentazione perché vedo che il controller è solo un middleware tra viste e BLL. Ecco come lo manterrei in modo da poter usare BLL come libreria per creare l'interfaccia utente per piattaforme diverse. È una specie di aspx.cs con supporto asmx. A volte sento che MVC è un brutto modo di organizzare i file in una cartella di progetto, è un po 'difficile da capire perché tutti i controller saranno a un livello e visualizzeranno in sottocartelle. Posso anche creare sottocartelle per controller ma il suo lavoro duplicato.
Nithin B,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.