2010-02-24 10 views
12

Ho un'associazione molti a molti tra un Dipendente e un Team. Foreach entità Ho un repository.BestPractices: è accettabile utilizzare più di un repository in un controller MVC?

Ora utilizzo ASP.NET MVC e ho creato un EmployeeController. Ho anche creato una vista per modificare un dipendente. Per questa visione ho bisogno di un DropDownList con tutti i team. Il problema è che il mio EmployeeController ha solo EmployeeRepository. Quindi, come posso ottenere tutte le squadre? La mia soluzione ora è quella di utilizzare due repository.

Ma questa è una buona soluzione?

Posso invece creare TeamController e scrivere un metodo per restituire tutti i team (come potrei farlo)?

risposta

8

Sì, è perfettamente accettabile che un controller abbia riferimenti a due repository.

In effetti, i miei controller funzionano con più repository il più delle volte.

1

Generalmente si crea un repository per la radice aggregata. Il repository avrebbe metodi che restituiscono le entità popolate per il controller.

Se le entità non sono completamente correlate nel modello di dominio, è possibile creare un servizio che racchiuda i due repository separati per ottenere i dati necessari.

+1

chi è la radice aggregata in un'associazione many-to-many :)? Nel mio modello di dominio ho un'associazione bidirezionale molti-a-molti. Mi chiedo quali benefici avrei quando creo invece una relazione unidirezionale. L'impiegato sarebbe rispetto alla radice aggregata. La squadra ha una sola relazione con il Dipendente quindi penso che sarebbe ok. – Rookian

+0

D'accordo, di fronte allo stesso problema sono andato con un servizio di dominio per concludere i repository. – blu

+1

Il mio suggerimento è 1: verifica se esiste logicamente una radice aggregata in termini di regole del dominio. In caso contrario, 2: utilizzare un servizio di dominio. Altre persone hanno suggerito servizi con + voti, quindi questo downvoted è discutibile. – blu

3

Vuoi andare intelligente? Non utilizzare repository all'interno di controller di alcun tipo. Utilizzare invece i servizi di dominio. Non suona così male quando pensi che un controller integri il lavoro di molti servizi no?

Problemi correlati