Differenza tra architettura 3-Tier e MVC (Model, View Controller) in ASP.Net

7

Mi piacerebbe sapere come l'architettura 3-Tier differisce da MVC (Model, View Controller) in ASP.Net come mi sembra che si applichi la stessa architettura.

In 3 livelli abbiamo User Services Layer , BusinessLayer e DataAccessLayer , d'altra parte abbiamo Model , View e Controller . Mi sembra la stessa architettura.

Qualcuno può spiegare se ciò che differisce davvero dalle due architetture, in che modo ciascun livello si differenzia l'un l'altro?

    
posta japzdivino 14.10.2015 - 12:04
fonte

3 risposte

15

Questo è come chiedere qual è la differenza tra una mela e un nucleo di mela. Queste due architetture non sono sostituzioni l'una dell'altra. Penso che una visione più accurata sia che l'architettura a 3 livelli aumenta MVC.

Architettura MVC

  • Modelli: rappresentano "roba" nella tua applicazione. Questo strato è diventato un po 'sfocato negli ultimi anni, come spiegherò più avanti.

  • Visualizzazioni: l'interfaccia utente. La cosa con cui l'utente interagisce.

  • Controller: il codice di programmazione che risponde all'utente e alle modifiche nel livello del modello

L'architettura a 3 livelli

Con l'architettura a 3 livelli, hai livelli con responsabilità diverse.

  • Servizi utente: (o "servizi" in generale) Questo livello riguarda più il coordinamento del recupero e le modifiche del livello "modello". Qui vengono eseguite complesse azioni multi-passo

  • Livello aziendale: rappresenta le regole aziendali incise nel codice di programmazione. Ciò che "The Business" vuole è applicato in questo livello.

  • Livello di accesso ai dati: una o più classi responsabili dell'accesso a un archivio dati persistente.

L'unica parte dell'architettura a 3 livelli che si interseca con MVC è "Business Layer". I "Modelli" in MVC e il "Business Layer" nell'architettura a 3 livelli stanno cercando di raggiungere lo stesso obiettivo.

La "M" in MVC è diventata sfocata

Il livello "modello" in MVC si è espanso negli ultimi anni. Da quello che ho visto, ci sono due, forse tre tipi di modelli:

  1. Modelli di dominio: rappresentano le "cose" di cui si occupa "The Business": il dominio aziendale. Queste classi contengono dati e tutte le procedure che operano su tali dati al fine di applicare le regole aziendali. Spesso i modelli di dominio sono legati alle tabelle in un database. Questo sembra adattarsi al "Business Layer" dell'architettura a 3 livelli.

  2. Visualizza modelli: Queste sono le classi utilizzate per massaggiare i dati dai modelli di dominio in qualcosa di più appetibile alla vista. Questo non si adatta all'architettura a 3 livelli poiché i modelli di visualizzazione non implementano la logica aziendale né forniscono alcun tipo di servizio o accesso ai dati.

  3. Modelli aziendali: in applicazioni complesse, sorge la necessità di disaccoppiare il modello di dominio dalla logica aziendale. I modelli aziendali contengono dati e procedure che operano su tali dati per implementare le regole aziendali e i modelli di dominio sono relegati su "Borse di proprietà" - oggetti che contengono solo dati ma non contengono alcun comportamento. I modelli di dominio diventano un'altra forma di oggetto di trasferimento dati tra il database e l'applicazione.

In nessun luogo in MVC è menzionato l'accesso ai dati. In alcuni casi, vedrai che l'accesso ai dati appartiene al livello "modello" di MVC, che come abbiamo visto non è più un livello ben definito. Vedo davvero un'architettura a 3 livelli associata con MVC per creare un'intera applicazione. Uno aumenta o migliora rispetto all'altro:

  • Modelli
    • Modelli di dominio (MVC / 3 livelli)
    • Visualizza modelli (MVC)
    • (facoltativamente) Modelli aziendali (MVC / 3 livelli)
  • Visualizzazioni (MVC)
  • Controller (MVC)
  • Accesso ai dati (3 livelli)
  • Servizi (3 livelli)

Ci sono alcune intersezioni, ma sono in gran parte separate, e insieme sono usate per disaccoppiare e isolare vari componenti di un sistema più grande.

    
risposta data 14.10.2015 - 19:54
fonte
2

So che ci saranno tantissime risposte diverse, ma ti darò la mia opinione su questo.

È la risposta più famosa nell'ingegneria del software "Dipende".

Essenzialmente se lo si guarda, oltre a varie implementazioni e differenze teoriche, si tratta di modelli molto simili con flussi simili.

Da dove arriva dipende l'applicazione che stai costruendo, una semplice webapp potrebbe avere solo un livello MVC che parla attraverso un ORM al DB. Uno più complesso può avere MVC che gestisce il front-end nel livello utente, con operazioni più complesse non esposte all'utente che si verificano nel livello BL, con il livello dati costituito da più origini.

    
risposta data 14.10.2015 - 15:03
fonte
2

No, non sono uguali.

MVC è un modello di progettazione per strutturare il codice dell'interfaccia utente. Potrebbe essere utilizzato in un'architettura a tre livelli, nel qual caso il modello dovrebbe appartenere al livello dei servizi utente. Ma può anche essere utilizzato per l'interfaccia utente in un'applicazione che non è a tre livelli, ad es. una calcolatrice senza persistenza sottostante e quindi senza livello di accesso ai dati.

In un'architettura a tre livelli con un frontend di MVC, gli oggetti di dominio utilizzati come modello sarebbero gli oggetti del livello aziendale, ma il pattern MVC in realtà non specifica il tipo di oggetti del modello, ma solo il loro ruolo nel modello è. Ad esempio nella variante MVVM, i modelli sono adattatori UI-specifc in cima agli oggetti dominio. In questo caso, anche il modello appartiene al livello del servizio utente.

    
risposta data 14.10.2015 - 18:55
fonte

Leggi altre domande sui tag