Zajmuję się projektowaniem opartym na domenie i niektóre koncepcje, które napotykam, mają sens z pozoru, ale kiedy myślę o nich bardziej, muszę się zastanawiać, czy to naprawdę dobry pomysł.
Na przykład koncepcja agregatów ma sens. Tworzysz małe domeny własności, abyś nie musiał zajmować się całym modelem domeny.
Kiedy jednak myślę o tym w kontekście aplikacji internetowej, często odwiedzamy bazę danych, aby wycofać małe podzbiory danych. Na przykład strona może zawierać tylko liczbę zamówień wraz z linkami do kliknięcia, aby otworzyć zamówienie i zobaczyć jego identyfikatory.
Jeśli jestem zrozumienia Kruszywa rację, ja zazwyczaj korzystają z repozytorium wzór do zwracania OrderAggregate które zawierają członków GetAll
, GetByID
, Delete
, i Save
. Ok, to brzmi dobrze. Ale...
Jeśli zadzwonię do GetAll, aby wyświetlić listę wszystkich moich zamówień, wydaje mi się, że ten wzorzec wymagałby zwrócenia całej listy zagregowanych informacji, kompletnych zamówień, linii zamówień itp. Gdy potrzebuję tylko niewielkiego podzbioru tych informacji (tylko informacje w nagłówku).
Czy coś brakuje? Czy jest jakiś poziom optymalizacji, którego byś użył? Nie wyobrażam sobie, aby ktokolwiek opowiadałby się za zwracaniem całych informacji, gdy nie są one potrzebne.
Z pewnością można tworzyć takie metody w twoim repozytorium GetOrderHeaders
, ale wydaje się, że to pokonuje cel polegający na użyciu wzorca takiego jak repozytorium.
Czy ktoś może mi to wyjaśnić?
EDYTOWAĆ:
Po wielu dalszych badaniach wydaje mi się, że rozłączenie polega na tym, że czysty wzorzec repozytorium różni się od tego, co większość ludzi uważa za repozytorium.
Fowler definiuje repozytorium jako magazyn danych, który korzysta z semantyki kolekcji i ogólnie jest przechowywany w pamięci. Oznacza to utworzenie całego wykresu obiektowego.
Evans zmienia repozytorium, aby uwzględnić korzenie agregatów, a zatem repozytorium jest amputowane, aby obsługiwać tylko obiekty w agregacji.
Wydaje się, że większość ludzi myśli o repozytoriach jako o uwielbianych obiektach dostępu do danych, w których po prostu tworzysz metody uzyskiwania dowolnych danych. Nie wydaje się, aby taka była intencja, jak opisano w wzorcach architektury aplikacji korporacyjnych Fowlera.
Jeszcze inni uważają repozytorium za prostą abstrakcję używaną przede wszystkim w celu ułatwienia testowania i wyśmiewania się lub w celu oddzielenia trwałości od reszty systemu.
Wydaje mi się, że odpowiedź jest taka, że jest to znacznie bardziej złożona koncepcja, niż początkowo myślałem.