2009-03-30 17 views
133

Mi chiedevo quale sia esattamente la differenza tra MVC (che è un modello architettonico) e un'architettura n-tier per un'applicazione. L'ho cercato ma non ho trovato una spiegazione semplice. Posso essere un po 'ingenuo con i concetti MVC, quindi se qualcuno può spiegare la differenza, sarebbe fantastico.MVC Vs architettura n-tier

acclamazioni

risposta

84

un'architettura an livelli di solito ogni strato separato dalla rete. OSSIA il livello di presentazione si trova su alcuni server Web, quindi si parla di back-end dei server di app sulla rete per la logica aziendale, quindi comunica con un server di database, nuovamente attraverso la rete, e forse l'app server richiama anche alcuni servizi remoti (per esempio Authorize.net per l'elaborazione dei pagamenti).

MVC è un modello di programmazione in cui diverse parti del 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 Model può 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 i server delle applicazioni per recuperare i dati. MVC riassume i dettagli di come viene implementata l'architettura di un'app.

N-tier fa semplicemente riferimento alla struttura fisica di un'implementazione. Questi due sono a volte confusi perché un design MVC viene spesso implementato utilizzando un'architettura N-tier.

+45

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

+5

implica fondamentalmente che si stia verificando una comunicazione tra processi attraverso un collegamento di rete. Non sono d'accordo sul fatto che un flusso di progettazione del codice in-process (e tanto meno nello stesso file) costituisca un approccio di progettazione a più livelli. Certo che è IMHO. "Server" implica che la macchina può eseguire diversi processi nella stessa casella; e probabilmente possono anche parlare ancora sulla rete "localhost". – Zak

+1

Tutti i formati discussi sono esempi di design a 3 strati. Non confondere la differenza tra un livello e un livello. È vero che è possibile eseguire più di un livello su un computer fisico (ad es. Si divide un grande server tramite hypervisor), ma il punto qui è N-Tier si allude a un hop di rete fisico (ad esempio TCP/IP). A livello locale, sarebbe più efficace usare pipe con nome, ma di nuovo, se si esegue lo stesso sistema, si sta cercando di risparmiare memoria e potenza di elaborazione. Tutti questi sono i motivi per considerare l'isolamento della presentazione, della logica aziendale e dell'accesso ai dati e del database su macchine diverse. –

1

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


Livello 1 - è costituita da modelli che comunicano con Livello 2 attraverso una sorta di servizio di rete o simile, controller per gestire l'input convalida, calcoli e altre cose rilevanti per le viste. E contiene le viste stesse, naturalmente - che può essere la GUI in un'app desktop o l'interfaccia Web in un'app web.


Tier 2 - Contiene una sorta di servizio o di altro modo di recieving messaggio Tier 1. non/non dovrebbe conoscere Livello 1, quindi in grado di rispondere solo alle chiamate da sopra - mai chiedere le cose da solo. Contiene anche tutte le logiche di business.


Tier 3 - Contiene il modello di dominio, rappresentazione dell'oggetto del database e ogni logica di comunicare e di aggiornamento del database-voci.

30

Questo è ciò che dicono di n-tier architecture

A prima vista, i tre ordini possono sembrare simile al MVC (Model View Controller) concetto; tuttavia, topologicamente sono diversi. Una regola di base in un'architettura a tre livelli è il livello client mai comunica direttamente con il livello di 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 a il controller, il controller aggiorna il modello e la vista viene aggiornata direttamente dal modello.

+10

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 inserti ma non per selezioni e filtri, e non vedo il punto di separazione delle preoccupazioni solo per legare la vista al modello comunque! Conclusione - MVC è un'altra di quelle offuscate create da .... avere un'ipotesi. Non ricordo che 3 livelli siano mai stati limitati a "architettura di sistema" o "progettazione di applicazioni". Il concetto centrale è ** separazione delle preoccupazioni **. – Sam

+1

Dipenderà 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. –

+1

@Sam totalmente d'accordo. Troppi gergo per un concetto intuitivo. – smwikipedia

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 affronta la questione di come passare le informazioni tra un utente e un database. Dove MVC è un'architettura triangolare: la View invia aggiornamenti al Controller, il Controller aggiorna il Modello e la Vista viene aggiornata direttamente dal Modello. Questo indirizzo domande su come un'interfaccia utente gestisce i componenti sullo schermo.

+0

Perché non votare? Questa è stata una affermazione affermata – contactmatt

38

Se un design a 3 livelli erano come questo:

Client <-> Middle <-> Data 

lo scalpiccio MVC sarebbe:

 Middle 
    ^ | 
    | v 
Client <- Data 

senso che:

  • in 3 livelli equivalenti, comunicazione tra livelli è bidirezionale e passa sempre attraverso il Mi ddle tier
  • nell'equivalente MVC la comunicazione è in unidirezionale; si potrebbe dire che ogni "strato" viene aggiornata da quello a sinistra e, a sua volta, aggiorna l'uno a destra -il "sinistra" e "destra" sono semplicemente illustrativi

P.S. client sarebbe il View e Medio il controller

+9

in MVC il modello può interagire direttamente con il client (vista) ??? Io non la penso così! – palAlaa

+6

@Alaa, sono d'accordo ed è per questo che _think_ si riferisce al flusso di dati. Aggiornamento : ho appena controllato Wikipedia, e il Modello può interagire con la Vista attraverso gli osservatori (non direttamente). – void

+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 –

5

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

Vorrei spiegare un po 'su MVC, secondo me Model View Controller funziona così.

  1. Il client avvia la sessione richiedendo per qualsiasi servizio.
  2. Questa richiesta viene ricevuta e gestita dal controller (gestore di richieste, redirector ecc.)
  3. Il controllore elabora le informazioni di base sulla richiesta e la 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 nell'architettura MVC vera, piuttosto si riempie e vengono restituiti al controller.)
  5. Controller piuttosto che inviare tali dati a Visualizza (Client).
  6. Il client ha il servizio richiesto di fronte a lui.

Questo è tutto su MVC che conosco.

+1

Penso che, come detto sopra, MVC sia triangolare, quindi la vista può talvolta parlare direttamente al modello e viceversa, come spiegato in questo documento: http://msdn.microsoft.com/en-us/library/ms978748 .aspx – ychaouche

3

Un'architettura di livello N viene definita al meglio utilizzando un diagramma di distribuzione.

Un'architettura MVC viene definita al meglio utilizzando un diagramma sequenza.

I 2 non sono uguali e non sono correlati ed è possibile combinare insieme le due architetture. Molte aziende hanno intrapreso i passi necessari per creare un'architettura N Tier per non solo implementazione e scalabilità, ma anche per il riutilizzo del codice.

Ad esempio, gli oggetti Entità aziendale potrebbero dover essere consumati da un'app desktop, un servizio Web esposto per un client, un'app Web o un'app mobile. Usare semplicemente un approccio MVC non ti aiuterà a riutilizzare nulla.

+0

Se mvc non sta riutilizzando nulla per il tuo scenario, allora ci sono dei vantaggi di mvc rispetto all'archivio n tier. – Dragon

2

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

16

L'unica somiglianza è che i due modelli hanno tre riquadri nei loro diagrammi. Fondamentalmente sono completamente diversi nei loro usi. Se di fatto, di solito non è una scelta tra quale schema 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 migliore risposta, soprattutto perché MVC è davvero incentrato sull'interfaccia utente e può essere il livello dell'interfaccia utente in un progetto a 3 livelli. Il diagramma nel link lo dimostra molto bene. – Alex

4

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

4

Concediti una pausa. E non limitarti a certi schemi quando risolvi problemi del mondo reale. Basta ricordare alcuni principi generali, uno dei quali è SEPARAZIONE DI PREOCCUPAZIONI.

0

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.