..., ale gdy obejmując Wiosna danych JPA, możemy wykorzystać korzyści tylko wtedy, gdy deklarujemy interfejs do jednego podmiotu ...
To źle i chciałbym dowiedzieć się, gdzie można dostać takie wrażenie z (dotyk swobodnie komentować). W repozytoriach Spring Data oczekiwane jest dokładnie to samo podejście do projektowania modelu domeny: identyfikujesz agregaty w swoim modelu domeny i tworzysz tylko interfejsy repozytoriów dla tych właśnie.
Twierdzę, że wszystko, co musisz zrobić, to zastosować koncepcję DDD do swojego modelu domeny. Po prostu nie zadeklaruj interfejsów repozytoryjnych dla encji, które nie są zagregowanymi źródłami. W rzeczywistości, jeśli je zadeklarujesz, w zasadzie łamiesz pojęcie agregatu, ponieważ rzeczywisty root nie może już kontrolować ograniczeń biznesowych, ponieważ inne jednostki mogą być manipulowane poprzez zdefiniowany dla nich interfejs repozytorium, tj. Bez użycia zagregowanego katalogu głównego.
Znajdź przykład tego poprawnie zastosowanego w tym Spring Data example. W nim Order
jest zbiorczym korzeniem, LineItem
jest zwykłym bytem. To samo dotyczy Customer
(root) i Address
(element zwykły). Interfejsy repozytoryjne istnieją tylko dla zagregowanych katalogów głównych.
W rzeczywistości ta konkretna relacja jest podstawową zasadą, która sprawia, że moduły takie jak Spring Data REST działają w pierwszej kolejności. Udostępnia zasoby HTTP tylko dla zagregowanych korzeni, osadza zwykłe elementy w tworzonych reprezentacjach i tworzy łącza do innych agregatów.
Dzięki za odpowiedź. Pojawiło się pytanie podczas próby rozważenia możliwości posiadania podmiotu jako części agregatu, który nie potrzebuje lub nie potrzebuje mapowania relacyjnego do zagregowanego korzenia, myślę, że można to osiągnąć poprzez niestandardowe repozytorium impl dla agregacji root, czy nie mam racji zakładając to? –
Co więcej, gdy muszę przejść z takim impedem niestandardowym, mniej lub bardziej zaczynam rezygnować z zalet Spring Data (jeśli moje założenie, o którym była mowa powyżej), jest ważne. –
Podmioty, które * nie są zawarte * w innym agregacie, mogą oczywiście uzyskać swoje repozytorium, także. Zwykle uważam je za agregat jednopodmiotowy, którego istotą jest sam zagregowany korzeń. Istotną częścią tego schematu jest to, że jednostek zawartych w agregacie nie wolno manipulować, chyba że poprzez agregat. W związku z tym nie każda jednostka JPA otrzymuje po jej stronie repozytorium danych sprężynowych. –