2009-02-03 10 views
7

Nella struttura della cartella MVC, dove risiedono i file di classe generali? Ad esempio, ho una classe che determina il DataContext corretto da utilizzare, quindi non sto reinventando la ruota in ognuno dei miei controller. Dovrebbe vivere nella cartella Controller anche se non è un controller? Dovrebbe essere con i modelli perché è collegato al database, anche se non è un modello? Forse la cartella Views \ Shared? O è Content la cartella catch-all per quel tipo di cose? Sono sicuro che potrei metterlo ovunque, ma mi stavo chiedendo dove sia il posto "giusto".MVC posizione classe generale

risposta

8

Non si tratta di un controller, di un contenuto o di una vista, quindi non utilizzarli. Sembra il più strettamente correlato al tuo modello, quindi potresti metterlo in un modello sotto una sottocartella chiamata "Helpers" o "Utility" o qualcosa del genere. Oppure puoi aggiungere un'altra cartella di livello superiore denominata Servizi e inserirla. Ecco dove ho messo tutta la mia logica di app, l'intermediario tra i controller e il modello.

+0

Hai inserito tutta la tua logica di applicazione nel progetto del livello di presentazione? Sembra orribile ... –

+0

Per piccoli progetti l'ho messo lì. Se i servizi saranno riutilizzati, avranno il loro progetto. –

0

Se può essere utile da solo (si pensi a uno strumento da riga di comando costruito attorno ad esso), inserirlo nella cartella Modelli. Se viene utilizzato solo come helper per i controller, inserirlo nella cartella Controller.

3

Se si guarda al di Rob MVC Storefront: classe separata progetto di libreria (come Commerce.MVC.Data)

+0

Non si tratta di ciò che fa Rob, è più di questo - è semplicemente un approccio standard alla separazione delle responsabilità e così via. L'accesso ai dati non ha alcuna importanza nel livello di presentazione dell'applicazione, a meno che non si parli di un'applicazione di una sola pagina in cui non avrebbe molto senso. –

0

tutto dipende da ciò che fa, se si accede ai dati dovrebbe essere in Data Access Layer in caso contrario, puoi metterlo nella cartella del controller.

0

dmajkic,

Perché separarlo nella propria area? Se il codice BLL deve essere nella cartella controller, se il relativo elemento DAL deve essere nel modello. Posso capire se un progetto diventa enorme e vuoi creare alcune sottocartelle, non dovrebbe essere un problema. Ma posizionare il codice in un altro livello è una vera sconfitta dello scopo di MVC, non credi?

+1

No. MVC è un modello di visualizzazione. Si riferisce al livello di presentazione. I controller dovrebbero contenere solo la logica di presentazione. Non dovrebbe esserci una logica aziendale nelle classi di controller. Dmajkic ha detto di collocare la classe in un progetto separato, non in un livello separato. – liammclennan

+0

@liammclennan - Esattamente, non so cosa stia fumando Al, ma forse dovrebbe smettere. –

0

Avere un assembly DataAccess separato, renderlo interno e chiamarlo DataContextFactory.

Problemi correlati