Se il livello del repository è correttamente estratto (ad esempio, il livello di servizio e il controller possono accedere al repository solo tramite interfacce), quindi:
- Avere il controller per accedere al repository semplifica direttamente quella parte del codice quando rimuove un livello di astrazione non necessario, ma
- Quindi accoppi i controller a entrambi i livelli di servizio e repository, che possono aumentare la complessità e
- È possibile che si stia creando un problema di manutenzione nel caso in cui sia necessario aggiungere la business logic in quel punto in futuro e quindi "re-scandagliare" quella parte del codice, ma
- Il principio YAGNI ("Non hai bisogno di gunna") entra in gioco qui, quindi è improbabile che tu possa consentire a questi potenziali problemi futuri di influenzare il design ora.
A conti fatti, continuerei a nutrire tutto attraverso il livello di servizio. Ma questa è pura opinione; l'accesso diretto al repository è ugualmente valido.
Se il livello del repository non è correttamente astratto (ovvero il livello di servizio tratta direttamente con le classi concreta di repository / database), allora:
- Risolvi!
- Non lasciare che i controller si avvicinino al repository finché non lo risolvi, poiché questo percorso porta a testare l'inferno.