Ho un sito MVC che utilizza il modello di repository. Non mi sembra di usare abbastanza lo stile MVC, quindi mi sto preparando a ri-progettarne alcuni. Ma voglio anche farlo, quindi se il front-end dovesse cambiare, sarà più facile sostituirlo.
Ecco cosa ho attualmente
Modelli: alcuni dei miei modelli contengono direttamente le mie entità / classi. (Il modello di accesso contiene la classe Customer, che è una correlazione diretta con la classe Tabella / repository Cliente) Visualizzazioni: alcune delle mie visualizzazioni contengono le domande repo, ovvero
_customerRepo.Query().FirstOrDefault(c => c.Login == User.Identity.Name);
Controller - Non è un grosso problema qui, i controller chiamano alcune richieste di repo, e alcuni di loro usano anche alcuni servizi per chiamare i repository - cioè
_customerService.GetAllCustomers()
che chiama
_customerRepo.Query().All();
Ecco i miei pensieri:
1) I modelli devono contenere SOLO i dati necessari per essere presentati sulla vista. Anche se tutte le proprietà della tabella / dell'oggetto Cliente sono presentate sulla vista, dovrebbero essere riscritte sul proprio modello / classe in modo che la vista non sappia nulla sull'architettura del database o sugli oggetti di backend
2) Le viste dovrebbero accedere solo agli oggetti del modello
3) (Ed è qui che sto lottando su quale percorso prendere)
a) I controller (o da qualche parte sul lato MVC, dovrebbero essere codice che converte i dati dell'oggetto restituiti dal repository / servizi e li converte nei modelli. Suppongo che potrei semplicemente inserire questo codice in un costruttore di modelli. Ma ho notato che DI si aspetta un costruttore vuoto predefinito nel caso ci siano errori di validazione
b) I controller chiamano le interfacce di repository su metodi ben denominati per recuperare i dati (ad esempio _customerRepo.GetAllCustomers ()
c) I controller accedono SOLO a un livello di servizio. Il livello di servizio è quindi l'unica cosa che interagisce con il livello repo.
Sto cercando di estrapolare troppo il modello, il controller, il servizio, i livelli del repository? Il livello dei servizi è troppo oneroso poiché può essere fatto dai repository?
Qual è l'approccio consigliato per convertire gli oggetti / entità aziendali nei modelli?