Martin Fowler uważa Anemic Domain Model za antystyk.Rich Domain Model i ORM
Trasowanie modelu trwałości jako modelu domeny również wydaje się zbyt poważne z powodu Object Relational Impedence Missmatch. W przypadku uporczywości i normalizacji, mamy tendencję do rozkładania klas na bardzo małe drobne kawałki, metody nakładania na te klasy są głupie. Poza tym uporczywość rzadko się zmienia, ale logika biznesowa zmienia się trochę.
Potrzebujemy zatem modelu DomainModel, który opiera się na modelu trwałości (zamiast być jednym i tym samym). Ten model domeny będzie zawierał właściwości i metodę logiki biznesowej.
Ale teraz te Modele Domen są nadal za usługą, a aby odsłonić je światu zewnętrznemu, musimy przekonwertować je na DTO.
Dokonujemy tego mapowania manny tutaj.
- Trwałość do domeny modelu
- Aby przekształcić model domeny w DTOs aby przejść między usługami
To nie koniec, ponieważ DTO konieczne może być odwzorowany w ViewModel.
Wszystko to i problem powielania logiki walidacji nadal nie znika, ponieważ klient chce walidacji w czasie rzeczywistym. ViewModel nie wie nic o walidacji, więc w SPA na przykład, jesteś zmuszony ponownie napisać logikę walidacji po stronie klienta (zazwyczaj w javascript).
Również usługi są z natury bezpaństwowe (wiadomość lub zorientowane na RPC), więc robimy wszystkie te mapowania, między trwałości, do OO, a następnie z powrotem do proceduralne, do jakiej korzyści? Jak uzasadniałbyś koszty w praktyce pod względem większości budżetów IT?
Dowiedziałem się, że posiadanie pełnego DDD, z Root Aggregate, Domain Models itp. Byłoby "fajne", ale jak można usprawiedliwić koszt i wydajność produkcji?
antywzorzec projektowy (lub antywzorzec projektowy) to wzór stosowany w społecznej lub gospodarczej operacje lub inżynierii oprogramowania, które mogą być powszechnie stosowane, ale jest nieskuteczne i/lub odwrotne w praktyce
A jeśli tak , czy DDD i Rich Domain Model nie pasowałyby do powyższej definicji wzoru antywłamaniowego niż "Lean" Modelu Domeny. Przepraszam, gardzę załadowanym słowem "Anemiczny".
Utrzymując model domeny, "Lean", zezwala się na to, aby można go było udostępniać bez naruszania "abstrakcyjnej zasady zależności", "nie powtarzaj się" oraz czasochłonnego, żmudnego i podatnego na błędy procesu mapowania jednego z danych przewoźnika do innego, i cokolwiek związanego z testem jednostkowym, który ma na to wpływ (chyba że myślisz o mapowaniu bez testów jednostkowych i masz nadzieję na najlepsze).
Myślę, że artykuł, który łączysz, podsumowuje dylemat. Tyle tylko, że nie wierzę w wysyłanie Modelu Domeny przez sieć, co wydaje się być zadaniem DTO. Nie ma sensu zachowanie się na DTO i wystawianie go na działanie klienta. Tak więc dla mnie architektura jest "wykonalna" z kolejną warstwą abstrakcji i mapowania oprócz 3 wspomnianych. A to jest dużo mapowania! Nie oznacza to, że jest inny sposób na wprowadzenie zagadnień związanych z UI do domeny w celu ponownego użycia. Myślę, że istnieje "szczęśliwe" medium pomiędzy dwoma ekstremami pololowymi. – Alwyn
"Przesuwaj mniej danych, a rzeczy mogą stać się prostsze" - Jego własny wniosek na końcu artykułu, który brzmi dla mnie jak Lean Model. – Alwyn
"Nie ma sensu zachowanie się w DTO i pokazywanie tego klientowi" - teraz rozumiem związek, jaki robisz między bogatym/anemicznym modelem domeny a warstwami. Czy sugerujesz, że obiekty domeny powinny być pozbawione tak dużej logiki biznesowej, jak to tylko możliwe, aby wysyłać je bezpośrednio do warstwy interfejsu użytkownika bez potrzeby używania DTO? Czy jest to coś innego, co określasz jako "Lean Model"? – guillaume31