Wiele tutoriali na temat DDD, które studiowałem, dotyczy głównie teorii. Wszystkie mają podstawowe przykłady kodu (Pluralsight i podobne).
W Internecie próbuje się również kilka osób, aby stworzyć samouczki dotyczące DDD z EF. Jeśli zaczniesz je studiować krótko - szybko zauważysz, że bardzo się od siebie różnią. Niektóre osoby zalecają, aby aplikacja była minimalna i unikała wprowadzania dodatkowych warstw, np. Repozytorium nad EF , inne zdecydowanie generują dodatkowe warstwy, często nawet naruszając SRP poprzez wstrzykiwanie DbContext
do Aggregate Roots.
Okropnie przepraszam, jeśli zadaję pytanie oparte na opiniach, ale ...
Jeśli chodzi o praktykę - Entity Framework jest jednym z najpotężniejszych i najczęściej używanych ORM. Niestety nie znajdziesz w nim kompleksowego kursu obejmującego DDD.
Ważne aspekty:
Entity Framework
DbSet
wyciąga UoW & Repository ( ) z pudełkaz EF twoje modele mają właściwości nawigacyjne
EF wszystkie modele są zawsze dostępne off
DbContext
(są one reprezentowane jakoDbSet
)
Pułapki:
nie możesz zagwarantować, że wpływ na twoje modele potomne będzie mieć tylko Zagregowane Korzenie - twoje modele mają właściwości nawigacyjne i można je modyfikować i wywoływać
dbContext.SaveChanges()
dzięki
DbContext
czemu możesz uzyskać dostęp do każdego modelu, omijając w ten sposób Korzeń zagregowanymożna ograniczyć dostęp dzieci głównego obiektu za pośrednictwem
ModelBuilder
wOnModelCreating
sposób oznaczając je jako pola - I nadal nie wierzę, że to właściwa droga o DDD plus to trudno ocenić, jaki rodzaj przygody może to doprowadzić w przyszłości ( dość sceptyczny )
Konflikty:
bez implementacji kolejnej warstwy repozytorium, która zwraca Agregat, nie jesteśmy nawet w stanie częściowo rozwiązać wyżej wspomnianych pułapek
wdrażając dodatkową warstwę repozytorium, ignorujemy wbudowane funkcje EF (każde
DbSet
jest już repozytorium) i nadmiernie komplikujemy aplikację
Mój wniosek:
Proszę o wybaczenie mojej ignorancji, ale w oparciu o powyższe informacje - albo Entity Framework nie jest odpowiedni do projektowania opartego na domenie, albo projektowanie oparte na domenie jest niedoskonałe i przestarzałe .
Podejrzewam, że każde z tych podejść ma swoje zalety, ale teraz jestem całkowicie zagubiony i nie mam najmniejszego pojęcia, jak pogodzić EF z DDD.
Jeśli się mylę - czy ktoś mógłby szczegółowo opisać prosty zestaw instrukcji (lub nawet podać porządny przykład kodu), jak postępować w sprawie DDD z EF, proszę?