Closed Marcin99b closed 2 years ago
Czyli ty chcesz, żeby Request było tym samym co Command (czyli czymś co ma skutki uboczne np: modyfikacja jakiś danych w db), ale z zwracaniem wyniku działania?
tak, chodzi o przeniesienie logiki serwisów na architekture cqrs
żeby akcje które są możliwe do opisania jednym zdaniem, mogły być odpalane w ten sposób
przeniosłem część logiki wyciszania użytkowników na komendy, bo było to możliwe z użyciem komend (Command) i wygląda to dużo czytelniej, niż używając serwisów
serwisy są dobre do logiki która jest używana w wielu miejscach, ale dużo z nich miało np 2 metody publiczne i np 3 metody prywatne
i działało to tak, że dało się rozbić jeden spory serwis z 5 metodami, na 2 komendy, po których jasno widać co robią
W takim razie, lepiej byłoby zamiast tych Request, dodać możliwość używania Command z zwracaną wartością. Wiem, że to trochę wbrew zasadom CQRS, ale w niektórych implementacjach się tak robi, bo zwykle nie ma złych efektów łamania zasady o bezwracających Command'ach.
no tak, ale myśle że lepszą opcją jest dodanie trzeciej możliwości, wtedy po typie definiujesz czy to może coś zwracać czy nie
wstępnie wstrzymałbym sie z tym do realnej potrzeby, możliwe że wszystko będzie sie dało zrobić samymi command/query
albo prawie wszystko (takie ulepszenie może mieć sens, ale jednak to zaburza sens idei cqrs)
wstępnie zamykam bo myśle że to będzie dość skrajny przypadek użycia, jeśli będzie inaczej to sie reaktywuje to zadanie
teraz mamy
Query - pobieranie danych bez skutków ubocznych Command - skutki uboczne, bez pobierania danych
czyli zgodnie z założeniami cqrs
Proponuję dodać jeszcze Request, który będzie służył głównie do skutków ubocznych, ale będzie potrafił zwracać dane
pozwoli to na przepisanie sporej części serwisów na RequestHandlery (a może i nawet query/command handlery)
architektura cqrs pozwala na dużo prostsze sterowanie aplikacją i skalowanie jej, niż w przypadku klasycznych serwisów, przeniesienie kodu na ten sposób, zajmie nam troche czasu, ale ostatecznie zwiększy testowalność