2015-09-18 19 views

risposta

24

Dal momento che la mia domanda è stata visitata molto nell'ultimo anno e non v'è alcuna risposta solida come sono consapevoli di questo, ho deciso di dare una risposta esauriente, per quanto possibile. Questa risposta si basa su alcuni reale esperienza di progetti e con poche consultazioni di esperti:

  1. Prima di tutto, è importante notare che nella progettazione del software processo, non c'è niente come giusto e sbagliato solida. Finché l'approccio funziona per il tuo progetto e si adatta bene, è right e se non lo è , è wrong. Non ci sono principi rigidi nel software design. Ci sono Project needs and specifications. Ma in generale, è stato accettato con Design Patterns and Principles rende progetto più robust, reliable e easy to maintain e rendere il codice loosely coupled and highly cohesive.
  2. L'intera storia di Software Design and Architecture riguarda come è possibile gestire facilmente il progetto e come è possibile mantenere le modifiche future di . Pensa a quale approccio ti dà la migliore risposta su loro. Questo sarà il meglio per te. Non pensare troppo a Professionalism! . Il tuo progetto cresce di volta in volta e diventa più maturo. Quindi pensa al tuo progetto!
  3. Come primo passo e per l'architettura di applicazione di livello Enterprise, tenta sempre di seguire Separation of Concerns o SoC. Significa che lo dovrebbe avere livelli diversi per i diversi livelli del tuo progetto. E Si consiglia vivamente di utilizzare diversi progetto nella vostra soluzione per Data Access Layer, Domain Entities, Business Layer e Presentation Layer. Nel progetto MVC5, è preferibile utilizzare Class Library Project per Data Access Layer, Domain Entities, Business Layer e un progetto MVC per Presentation Layer.
  4. Data Access Layer è il progetto rivolto alle interazioni tra database e database. Potresti avere tutte le tue Entity Framework o entità simili in questo progetto. Disporre di layer separati per layer di database significa cambiare il tuo data warehouse di progetto, l'unica cosa che devi cambiare è la modifica di questo progetto e alcune modifiche minori sul tuo Business Layer. Tutti gli altri progetti nella soluzione rimangono intatti. Quindi potresti facilmente passare da MS Sql a Oracle o da Entity Framework a NHibernate.
  5. Domain Entities è il progetto che utilizzo per definire tutte le mie interfacce di livello di livello, classi, enumerazioni e variabili. Questo progetto mantiene l'integrità di durante la mia soluzione sulle mie classi e sui miei metodi. Il mio tutte le classi in tutta la soluzione sono ereditate dalle interfacce in questo progetto .Così ho un posto per cambiare le mie classi o le variabili globali e significa Easy to Maintain per il futuro nella mia soluzione e di facile comprensione per gli sviluppatori appena entrati nel progetto.
  6. Business Layer è il luogo in cui ho inserito tutte le mie logiche di business, tra cui Business Entities e Business Services. L'intera idea di questo livello è interazioni con lo . Tutti i calcoli, la modifica dell'oggetto e tutta la logica relativi ai dati, inclusi salvataggio, recupero, modifica e così via, dovrebbero essere disponibili in questa sezione in . Avendo questo livello nel tuo progetto, è possibile che tu abbia diversi utenti allo stesso tempo, ad esempio uno nativo MVC e uno Web API livello. In alternativa, è possibile fornire un'alimentazione diversa da in base alle specifiche dei consumatori dei servizi commerciali . Si consiglia vivamente di evitare di inserire qualsiasi logica aziendale nella sezione controller del livello MVC. Avere una qualsiasi logica di business all'interno dei controller significa che si utilizza il livello di presentazione come livello di business logic e viola Separation of Concerns. Quindi non sarà facile passare da un presentatore all'altro o con diversi tipi di consumatori per la tua soluzione . È meglio mantenere la sezione controller in MVC sottile come possibile. I controller devono avere solo logica e metodi direttamente correlati a View Models. Per ulteriori informazioni su View Models fare riferimento alla sezione 7. Una cosa da ricordare, è meglio per avere classi diverse Business Services basate sulla soluzione oggetti o Business Entities.
  7. Presentation Layer in soluzione MVC sarà un progetto MVC. Ma la soluzione potrebbe avere un altro tipo o più di uno Presentation Layers per diversi utenti o tecnologia. Ad esempio potresti avere uno strato MVC e uno Web API in un'unica soluzione. Generalmente utilizzare il livello di presentazione per mantenere tutta la logica di presentazione al suo interno. La logica di presentazione non deve avere nulla correlato alla logica aziendale o alla logica dei dati. Quindi la domanda è: cos'è Presentation logic? Presentation logic è logico relativo alla visualizzazione dei modelli. Visualizza i modelli sono oggetti personalizzati per viste o pagine. Nella maggior parte dei casi, gli oggetti aziendali non sono adatti per l'uso nelle viste. D'altra parte, le visualizzazioni di presentazione di di solito richiedono una logica di convalida o la logica di presentazione , ad esempio il nome visualizzato diverso dai nomi di oggetti originali . In questi casi è meglio mantenere la logica di presentazione separata dalla logica aziendale per semplificare la modifica della logica di presentazione o logica di business in modo indipendente e persino semplice per passare il livello di presentazione per la progettazione dell'interfaccia utente o la modifica della logica aziendale per avere più funzionalità senza timore di qualsiasi interruzione con logica di presentazione. Nel caso di utilizzo del progetto MVC come livello di presentazione per la soluzione, tutti i modelli di visualizzazione devono essere posti nella sezione Models del progetto MVC e tutta la logica di presentazione deve essere inserita nella sezione di progetto Controllers.
  8. L'ultima cosa da dire è per ogni soluzione a più livelli, sono necessari i framework per la mappatura da oggetto a oggetto, ad esempio per convertire l'entità aziendale per visualizzare il modello.Esistono alcuni strumenti per questo scopo come AutoMapper, BLToolkit e EmitMapper.

Ultima parola: si prega di commento e punteggio question e la mia answer per renderlo migliore!

+2

Hai trovato qualche buon esempio di progetto? –

+0

Supponendo che ci atteniamo al framework delle entità, possiamo fare con le entità generate come entità di dominio? Suppongo che il passaggio a database supportati come Oracle dovrebbe essere quasi perfetto. – Tarik

+0

@ Tarik Per favore, chiarisci la tua domanda? – Hadee

Problemi correlati