~ TLDR: Wdrażam rozwiązanie CQRS + DDD dla jednego z moich większych projektów, i zastanawiam się, czy istnieje prawdziwy powód, dla którego moje programy obsługi komend nie mogą bezpośrednio wysyłać obiekt polecenia do moich agregatów, w niewielkiej liczbie przypadków, gdzie obiekt polecenia jest bogaty w dane? Nie mogę znaleźć żadnego konkretnego powodu, dla którego miałby to być jakiś anty-wzór, i nie mogę znaleźć żadnych opinii, które szczegółowo opisują ten typ projektu.Przekazywanie komend CQRS bezpośrednio do obiektów Domain
Tło: Zaimplementowałem już systemy CQRS i mam wdrożone aplikacje DDD, ale nigdy CQRS + DDD w odpowiedniej aplikacji opartej na domenie stylu Eric Evans. Pytam więc, ponieważ nie chcę nadużywać moich Agregatów i zranić mojego wniosku na dłuższą metę.
Przykładem mojego obiektu polecenia zawierającego sporo danych byłoby polecenie rejestracji, które obejmuje 8 + pola (imię, nazwisko, preferowana nazwa, imię i nazwisko, tytuł, nazwa użytkownika, hasło, dział itp.). Czuję się bardzo niezręcznie tworząc na moim Aggregate metodę, która ma 8 par, a alternatywne rozwiązanie użycia jakiegoś dto, a mój przewodnik mapuje polecenie do dto - albo automagicznie używając automappera, albo inline - wydaje się niepotrzebnym i abstrakcja bez wartości dodanej.
Mogę również zobaczyć przyszłe przypadki użycia, w których polecenia mogą być bogate w dane (nie będzie to duży procent poleceń, ale wciąż będzie ich kilka), więc chciałbym, aby ten pozornie banalny aspekt był poprawny od początku.
O ile pamiętam, DDD nie mówi dokładnie, jak zaimplementować model domeny, ale robi to CQRS. Brak konfliktu tutaj. Odnośnie prostych obiektów poleceń, w jaki sposób przekazałeś je do Aggregates? Sądzę, że masz abstrakcję/interfejs, od których oba zależą. – neleus
Przekazuję dane polecenia (nie rzeczywisty obiekt komend) do agregatu za pośrednictwem parametrów. Polecenie jest odbierane przez program obsługi, który ładuje agregat i po prostu przekazuje mu to, czego potrzebuje, za pomocą odpowiednio zaprojektowanej metody. Zwykle jest to tylko jeden lub kilka parametrów, tak jak lubię, ponieważ uważam, że dobrze zaprojektowany agregat powinien mieć metody, które wymagają bardzo niewielu parametrów. W przeciwnym razie prawdopodobnie w jakiś sposób narusza SRP. Ale są * niektóre * przypadki krawędzi, w których może być wymaganych wiele parametrów. – AaronHS
Czy rozważałeś przekazanie całego obiektu polecenia do Aggregate? Wygląda to prosto, bez wad. – neleus