Ho utilizzato i framework MVC per un po 'di tempo e mi piace molto come le preoccupazioni siano separate. Ho avuto la brutta abitudine di lasciare che i controller facciano un bel po 'di lavoro. Quindi sto davvero cercando un consiglio.Service Layers and Depositories
Quando ho iniziato a utilizzare MVC, ho avuto spesso il controllo del controller sui modelli dopo che il database era stato eseguito. Sapevo che era brutto, quindi mi sono trasferito nei modelli. Comunque non sono contento di questo perché voglio che i miei modelli siano molto utili.
Ho letto un po 'di lettura e vedo che le persone mantengono i loro controller e modelli snelli avendo un livello di servizio, che mi piace molto.
Sto solo cercando di capire come un livello di servizio e un repository dovrebbero lavorare tutti insieme. Ecco le mie ipotesi, puoi per favore farmi sapere se questo è un buon modo di lavorare?
- Il controller può chiamare il repository direttamente se nessuna manipolazione deve essere fatto sui dati e come tale un livello di servizio non ha bisogno di essere coinvolti
- Una volta che ogni lavoro deve essere fatto per i dati (logica di business) questo dovrebbe essere fatto nel livello di servizio e il controller effettuerà una semplice chiamata al livello di servizio come e quando richiesto
- Una volta che il servizio ha fatto la sua logica di business, utilizzerà il repository come necessario (se i dati devono essere persistito).
- I modelli dovrebbero idealmente essere mantenuti magri, idealmente come nient'altro che DTO
- La convalida dei dati verrà eseguita all'interno dei modelli (utilizzando gli attributi di convalida MonoRail). Apprezzo che nemmeno uno gradisca inquinare i loro modelli con molti attributi, ma questa è una discussione diversa. Mi piace il beneficio degli attributi di convalida di MonoRail per la convalida automatica di jQuery nell'interfaccia utente.
Sto cercando di trasformare tutto il mio codice in un unico principio di responsabilità, quindi cercando di risolvere le mie pratiche di codifica.
Grazie
La mia unica preoccupazione nel mettere la logica di business nei modelli è che quando si passano raccolte di modelli all'interfaccia utente tramite il PropertyBag (o comunque), si sta potenzialmente aprendo la logica di business all'interfaccia utente. –
Sono d'accordo con i tuoi commenti, sento solo che una quantità eccessiva di business logic dovrebbe essere memorizzata in un livello di servizio separato. Cerca di mantenere i tuoi modelli, viste e controller il più piccoli possibile – StevenMcD