2010-02-24 7 views
12

Mam wiele assocition między pracownika i zespołu. Foreach entity Mam repozytorium.BestPractices: Czy dopuszczalne jest używanie więcej niż jednego repozytorium w kontrolerze MVC?

Teraz używam ASP.NET MVC i stworzyłem EmployeeController. Stworzyłem także Widok, aby edytować pracownika. Do tego widoku potrzebuję DropDownList ze wszystkimi zespołami. Problem polega na tym, że mój EmployeeController ma tylko EmployeeRepository. Jak mogę zdobyć wszystkie zespoły? Moim rozwiązaniem jest teraz użycie dwóch repozytoriów.

Ale czy to jest dobre rozwiązanie?

Czy mogę zamiast tego utworzyć TeamController i napisać metodę zwracającą wszystkie zespoły (jak to zrobić)?

Odpowiedz

8

Tak, jest całkowicie dopuszczalne, aby kontroler miał odniesienia do dwóch repozytoriów.

W rzeczywistości moje kontrolery często pracują z wieloma repozytoriami.

1

Zazwyczaj można utworzyć repozytorium dla zagregowanego katalogu głównego. Repozytorium będzie miało metody zwracające encje zapełnione dla kontrolera.

Jeśli jednostki nie są całkowicie powiązane z modelem domeny, może być konieczne utworzenie usługi zawijania dwóch oddzielnych repozytoriów w celu uzyskania potrzebnych danych.

+1

kto jest głównym źródłem skojarzeń wiele do wielu :)? W moim modelu domeny mam dwukierunkowe powiązanie wiele-wiele. Zadaję sobie pytanie, jakie korzyści miałbym, gdy zamiast tego stworzyłem relację jednokierunkową. Pracownik byłby w stanie zagregowanym rootem. Zespół ma tylko jedną relację z Pracownikiem, więc myślę, że byłoby dobrze. – Rookian

+0

Uzgodniono, że w obliczu tego samego problemu przeszedłem z usługą domeny, aby podsumować repozytoria. – blu

+1

Moja sugestia to 1: zobacz, czy logicznie istnieje zagregowany katalog główny pod względem reguł domeny. Jeśli nie, 2: użyj usługi domeny. Inne osoby zaproponowały usługi z + głosami, więc to odrzucenie jest wątpliwe. – blu

3

Chcesz iść sprytnie? Nie używaj repozytoriów wewnątrz kontrolerów. Zamiast tego korzystaj z usług domenowych. Nie brzmi to tak źle, gdy myślisz, że jeden kontroler integruje pracę wielu serwisów, prawda?

Powiązane problemy