Controller di gestire il flusso di applicazione, in modo da dove viene la mia logica di business vanno?
-
21-08-2019 - |
Domanda
Inizierò questa domanda ammettendo Sono molto nuovo a MVC. Il modello di progettazione ha senso per me ad un livello alto, ma ora che sto esplorando ASP.NET MVC, alcuni dei pezzi architettonici stanno sfidando le mie nozioni preconcette. L'apprendimento è una buona cosa.
Ho lavorato con Oxite ultimamente come strumento di apprendimento scritte da persone al società che ha creato ASP.NET MVC e, quindi, un'applicazione di riferimento apparente per ASP.NET MVC.
Ma oggi ho visto un post su Oxite da Rob Conery che dice:
Una delle cose che il team Oxite ha deciso di fare è stato quello di separare la Controller e viste in un altro Progetto per quello che posso solo supporre è la separazione della logica di business dalla vista logica. Questo può portare a qualche confusione in quanto controllori sono destinati per gestire il flusso di applicazione - non necessariamente la logica di business.
Questo mi ha gettato per un ciclo. È questo un principio di separazione di MVC e quindi un errore da parte degli sviluppatori Oxite, o è l'opinione di Rob? Se la logica di business appartiene nel modello, perché il team di Oxite metterlo nel controllore? Come faccio a eseguire un'azione che è logica di business, se non nel controllore?
Oltre a ciò, sto facendo un errore utilizzando Oxite come punto di riferimento di apprendimento considerando commenti come Rob?
Soluzione
la logica di business va nel vostro livello di business. I controllori usano lo strato di business per creare un modello per le vostre opinioni al rendering. Un buon esempio è l'applicazione MVC Storefront che Rob Conery ha prodotto. Oxite sta attualmente ricevendo un sacco di cattiva stampa in quanto apparentemente non fa buon uso del framework MVC.
La ragione per cui si desidera un livello di business che è separato dal vostro controller è si consiglia di riutilizzare lo strato di business attraverso più controller, o anche le applicazioni multiple. Un esempio di questo sarebbe normali funzioni utente per la visualizzazione dei dati, e funzione amministrativa per l'aggiornamento e l'aggiunta di dati. Si può fare uso degli stessi componenti BL in entrambi i casi, ma hanno diversi controllori e punti di vista per rendere ai dati. oggetti del modello sarebbe la stessa.
Altri suggerimenti
Si potrebbe implementare il livello di business (vale a dire il modello) con le entità, aggregati, depositi e servizi. I servizi di call repository, che tirano i dati dal vostro DAL sotto forma di entità.
Questo può essere impostato in un unico progetto, separato che non è altro che una DLL.
Quindi, avere il vostro MVC App, che è in realtà la parte di presentazione, e lo hanno utilizzare il vostro progetto livello di business. i controllori lavoreranno con i tuoi servizi, e la pompa dei dati questi servizi generano in Viewdata che viene poi pompata in vostro punto di vista.
I regolatori dovrebbero trattare solo con le preoccupazioni di routing, come ad esempio quali viste da visualizzare, basate su input dell'utente dalle forme, querystrings, biscotti, sessioni, ecc.
c'è stato un putiferio da parte della comunità "puristi MVC" circa la validità di Oxite essere utilizzato un buon esempio MVC. La linea di fondo è, la logica di business non deve essere contenuta in controllori, che sono sicuro si vedrà come Oxite viene riscritta nel corso dei prossimi mesi.