introduzione
Questo è qualcosa che ho chiesto anche a me stesso. Una domanda ardente che ho sempre è simile alla tua;
Quale sarebbe una buona convenzione di denominazione?
Come dovrei nominare le cose? Dovrebbero andare in cartelle o progetti?
Dopo aver cercato in giro sospetto che la risposta sia quella Non importa davvero. L'importante è che la tua soluzione ha un'architettura sensata e che tu cerchi di seguire buone pratiche come SOLIDO.
I miei eroi ASP.NET MVC su questo argomento sono Jeffrey Palermo, Steve Smith e Jimmy Bogard.
Architettura di cipolla
Jeffrey Palermo discute una combinazione di vecchie idee ma le riunisce e gli dà il nome visivamente stimolante di Architettura di cipolla (una lettura consigliata). Jeffrey mostra un buon approccio al problema di dove mettere le cose. Spiega che al centro (o in alto) della tua applicazione hai il tuo Nucleo. Questo livello è dove dovresti mettere interfacce come IRepository
e IService
.
Quasi tutte le tue interfacce dovrebbero andare nel nucleo e tutto il resto (altri progetti) possono fare riferimento al core. In questo modo tutto conosce la struttura scheletrica dell'applicazione senza conoscere i dettagli di implementazione.
Prova ad avere il riferimento al livello dell'interfaccia utente il meno possibile (entro ragione). In una delle mie applicazioni il mio livello di interfaccia utente (MVC) fa solo riferimento al core. Tutto ciò di cui ha bisogno viene iniettato in esso Iniezione di dipendenza.
Steve Smith discute l'architettura della cipolla e idee simili con dimostrazioni in Best practice MVC Solution: una soluzione al problema della soluzione
La mia soluzione
Nelle mie soluzioni MVC ho una struttura tipica come questa:
- Myproject.core
- Myproject.domain
- Myproject.dipendencyiniezione
- Myproject.infrastructure
- Myproject.web
- Myproject.test
Il Nucleo contiene le mie interfacce. Di solito è diviso in cartelle come servizi, modelli, dominio, repository e così via.
Il Dominio Layer fa riferimento solo al core e contiene la mia implementazione. Fornisce molte delle classi concrete per l'astrazione del dominio nel nucleo. Si occupa di molte logiche aziendali, elaborazione, gestione dei comandi, lezioni di manager, implementazioni di servizi concreti e così via. Lo considero uno strato abbastanza interno e quindi fa riferimento al meno possibile.
Il Iniezione di dipendenza Layer contiene il mio pacchetto/framework e i dettagli di implementazione scelti. Lo considero uno strato esterno; Simile all'interfaccia utente o all'infrastruttura e quindi va bene se fa riferimento molto. Non è necessario che questo strato sia un progetto separato e molte persone ti diranno di non farlo. Va bene; Fai ciò che funziona per la complessità del tuo progetto. Mi piace che il mio DI sia la sua cosa. La cosa buona del fatto che sia così separato è che potrei sostituire il framework DI con uno diverso e le cose andrebbero bene. Nessun livello fa riferimento al progetto DI.
Il Infrastruttura Layer contiene informazioni su registrazione, e -mail e accesso ai dati. Conterrà il mio Orm di scelta. Non è roba da business-logic e non sono cose dell'interfaccia utente. È la ferrovia della mia soluzione per fare le cose. È sullo strato esterno ma fa solo riferimento al nucleo.
Il ragnatela Layer è il mio progetto MVC e fa riferimento solo al nucleo.
Complessità e pensieri finali
Ho trovato risposte a domande simili qui, ma tendono a coinvolgere un'architettura più complicata di quella che ho delineato qui
È un buon punto. È importante tenere a mente la complessità del tuo problema. Ma non essere scoraggiato da buone pratiche di soluzione. La mia soluzione e l'architettura di cipolle non sono necessariamente molto complesse e non si gonfiano davvero la tua soluzione. Mantengono le cose separate.
In Struttura evolutiva del progetto, Jimmy Bogard parla di cose eccessivamente complesse. Se quello che ho detto sembra troppo complesso, segui il consiglio di Jimmy e metti tutto in un progetto (il tuo livello dell'interfaccia utente). Va bene, purché tu ti si adatti.
Ricorda di prendere la mia soluzione solo come idea - qualcosa da considerare; Il mio approccio è un tentativo di seguire i consigli salti dal meglio, ma sono sicuro che ci sono riuscito solo così tanto; Posso (e devo) ancora migliorare.