2010-05-28 12 views
5

Ho già fatto una domanda simile e ho ottenuto anche una risposta convincente?Cosa c'è di meglio: sviluppare un progetto Web in MVC o N -Tier Architecture?

What is difference of developing a website in MVC and 3-Tier or N-tier architecture?

A causa della conclusione di questa domanda ho iniziato a sviluppare progetti in N-tier Architettura.

Circa un'ora fa, ho fatto un'altra domanda, su quale sia il miglior schema di progettazione per creare l'interfaccia? Lì la risposta più votata mi suggerisce di usare l'architettura MVC.

What is the best design pattern to design the interface of an WebPage?

Ora sono confusa, primo post mi ha suggerito che entrambi sono simili, solo una differenza che in N-tier, il livello sono fisicamente e logicamente separata e uno strato ha accesso a quella sopra e sotto ma non tutti gli strati.

Penso che ASP.net abbia utilizzato l'architettura a 3 livelli durante lo sviluppo di applicazioni o applicazioni Web. Dove come framework come Zend, Symphony usano MVC.

Voglio solo attenermi a uno schema che è più adatto per lo sviluppo di WebProject? Può essere una confusione molto sciocca? Ma se qualcuno potesse chiarire questa confusione, sarebbe molto grato?

+1

Sarà più facile rispondere se si spiegare più in dettaglio quello che hai in mente quando si dice "n-tier" e "MVC ". Entrambi questi termini si sono evoluti nel tempo e hanno acquisito diversi significati, alcuni dei quali si escludono a vicenda. –

+0

In realtà, non ho una grande comprensione in entrambe le architetture MVC e N-tier – Starx

+0

Il miglior modello di design è probabilmente un mito in quanto nulla sarà perfetto in tutti i casi, IMO. –

risposta

8

Non si escludono a vicenda. Il modello Model-View-Controller è in realtà un modello di progettazione dell'interfaccia utente e riguarda i livelli logici anziché fisici.

Ho sentito spesso "architettura n-tier" utilizzata per descrivere l'effettiva separazione fisica dei livelli di un'applicazione. Ad esempio, un sistema in cui l'interfaccia utente viene eseguita in un unico processo, scambia i dati con un livello dell'applicazione (magari tramite messaggistica o servizi Web) che viene eseguito in un altro processo (magari su un altro server), che a sua volta accede a un livello dati eseguito in un altro processo (in genere un server di database).

Questa descrizione può essere particolarmente confusione perché 'logica dell'applicazione' può avere più significati: in un sistema a più livelli in genere significa struttura logica - al contrario di logica di interfaccia utente (come quali widget sono abilitate l'utente seleziona una particolare casella di controllo).

Ad esempio, in un sistema a più livelli, il livello di presentazione potrebbe chiamare un metodo di servizio Web che accetta un ID oggetto. Il servizio Web viene eseguito su un server diverso, dove esegue calcoli complicati e restituisce un prezzo.

In un'architettura più semplice, l'applicazione potrebbe calcolare il prezzo del prodotto nello stesso processo come interfaccia utente - se la logica dei prezzi può essere diviso in una propria logica strato (forse entro biblioteca o eseguibile).

Non riesco a pensare ad alcun framework MVC corrente che si preoccupi che i loro livelli vengano eseguiti in processi fisici separati o meno.

3

voglio solo attenersi a un modello che meglio su WebProject sviluppo? Può essere che si tratti di una confusione sciocca molto ? Ma se qualcuno potesse risolvere questa confusione, , sarebbe molto grossa?

Credo che la vostra confusione è in due aree:

1) L'ipotesi che ci sia una soluzione per ogni problema.

Il requisito del progetto determinerà quale soluzione è la migliore.

2) La definizione di MVC quando applicata al web è diversa da quella originariamente applicata alle applicazioni desktop.

Alcuni dicono che se la vista non parla con il modello, allora non può essere MVC. Bene, la maggior parte delle implementazioni Web MVC non ha la vista di parlare con il modello, ma è ancora chiamato MVC.

Dato che sei un amatore auto-descritto, dovresti abbracciare questo assioma in anticipo: il mondo della programmazione è sempre fonte di confusione per tutti.

1

MVC basato sul Web è molto diverso dal MVC desktop tradizionale. Il modello semplicemente non ha modo di aggiornare la vista, perché il web è (per la maggior parte) stateless.

Anche se si utilizzava AJAX per eseguire il polling del server ogni due secondi per verificare gli aggiornamenti del modello, che non sarebbe ancora MVC "vero" perché non è il modello che notifica la vista, è il controllore che "interroga costantemente" i modelli .

La lezione appresa è che in realtà non importa ciò che etichetta la tua architettura. Ci sono così tante varianti di livello MVC/3 che di solito le persone le mettono semplicemente sotto la coperta "MVC". E tutti questi sono adatti per lo sviluppo web. Non riesco a pensare ad alcun modo pratico per far sì che il Modello notifichi effettivamente la Vista attraverso la programmazione lato server (almeno non in PHP). Se hai bisogno di questo tipo di comportamento, dovresti scrivere un'applicazione desktop. Basta scrivere ciò che è naturale per te e non farti coinvolgere nei dibattiti terminologici. Guarda quali sono alcuni dei ben noti framework come CodeIgniter, Kohana, Symfony, CakePHP e Zend e scegli e scegli quali caratteristiche o modelli di design ti piacciono.

2

Si consiglia di rivedere il Microsoft Application Architecture Guide. Ha una buona panoramica delle tecnologie Microsoft disponibili da un punto di vista di architettura. I capitoli che potrebbero essere di interesse per voi:

  • Chp 21 Designing Web Applications
  • Appendice B: Presentazione tecnologia a matrice
  • Appendice C: accesso ai dati tecnologia a matrice

Per quanto riguarda ciò che è meglio ? Devi rispondere a te stesso. Realizza alcuni progetti di esempio utilizzando MVC, WebForms, ecc.

0

Perché non utilizzare entrambi? Al momento sono impegnato a sviluppare un progetto utilizzando il pattern MVP e un'architettura N-tier. Sto usando il pattern MVP nel progetto dell'interfaccia utente, es. il sitoweb. Tutti i dati che devono essere mostrati e utilizzati nel sito Web vengono trasmessi da un servizio web. Questo servizio Web è connesso a un livello aziendale (BLL), che è connesso al livello di accesso ai dati (DAL). Il DAL è connesso al database utilizzando Entity Framework.

Quindi in questo progetto li sto utilizzando entrambi. Utilizzando MVP invece di MVC però. In questo modo il progetto di interfaccia (sito web) non deve fare cose difficili, solo passare attraverso alcuni dati che vengono ricevuti dal webservice. Mi ci è voluto un po 'per iniziare, ma funziona abbastanza bene.

Inoltre, non esiste una risposta reale a quale modello o architettura sia la migliore. Tutto dipende da ciò che desideri e di cui hai bisogno. Se vuoi essere scalabile, un'architettura a più livelli è una buona soluzione. Se vuoi essere in grado di testare la tua interfaccia utente abbastanza facilmente, anche un pattern MVC è buono. Ci sono un sacco di altri modelli e architetture che sarebbero sufficienti, purché tu sappia come usarli.

0

Non esiste il migliore. MVC e n-tier non sono né o cose. Uno è design di oggetti/API, uno è l'architettura di sistema. La domanda di distinguere tra i due è stato chiesto e ha risposto qui:

MVC Vs n-tier architecture

+0

+1 alla risposta originale. –

Problemi correlati