Trwałość Ignorancja jest zastosowaniem zasady pojedynczej odpowiedzialności, co w praktyce oznacza, że Obiekty Domeny ( DO ) nie powinny zawierać kodu związanego z trwałością, a jedynie logikę domeny.
a) Zakładam, że oznacza to, że kod, który kontaktuje się z niższymi warstwami (tj. warstwami trwałości), żyje poza modelem domeny w innych klasach ( OC ) warstwy logiki biznesowej?
b) Jeśli moje założenie pod a) jest poprawna, to ZROBIĆ , powiedzmy Customer
, nie zawiera metody takie jak GetCustomers
czy GetCustomerByID
?
c) Jeżeli moi założenia pod wa) i b) są prawidłowe, i przy założeniu, że Customer
obiekt domeny używa lazy ładunkowe niektóre jego właściwości, a w pewnym momencie Customer
wewnętrznemu logiczna musi skontaktować OC , co z kolei pobiera odroczonego danych. Ale jeśli Customer
trzeba skontaktować się z OC w celu otrzymania odroczonych danych, to nie możemy tak naprawdę twierdzić, że Obiekty Domeny nie zawierają logiki związanej z trwałością ?!
Dziękuję Ci
ODPOWIEDZI NA Jkohlhepp
1) Zakładam, OrderProvider
a CustomerProvider
zajęcia są zawarte w warstwie logiki biznesowej?
2) Z Twojej odpowiedzi wynika, że moje założenia w punkcie b) są prawidłowe?
3)
... sprawdziłbym, czy jakieś prywatne pole zamówień jest zapełnione, czy jest puste. Jeśli jest zerowy ...
Ale o ile mogę stwierdzić, gdy tylko kod domeny musi sprawdzić, czy order
pole prywatne zostało zapełnione, a jeśli nie, kontaktując się z OrderProvider, już naruszamy zasadę PI ?!
źródło
Masz tylko pewną klasę połączeń, która wypełnia obiekty domeny (powiedzmy coś zwanego „repozytorium”). Możesz wdrożyć leniwe ładowanie lub dowolny inny schemat spójności pamięci podręcznej, a obiekty domeny nie są mądrzejsze. Oddzielasz odpowiedzialność za wypełnianie obiektów domeny od bycia obiektami domeny.
źródło