Devscord-Team / Watchman

https://devscord-team.github.io/Watchman/
https://devscord-team.github.io/Watchman/
GNU General Public License v3.0
24 stars 12 forks source link

Architektura - dodanie do cqrs typu Request #152

Closed Marcin99b closed 2 years ago

Marcin99b commented 2 years ago

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ść

DavidPL-coder commented 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?

Marcin99b commented 2 years ago

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ą

DavidPL-coder commented 2 years ago

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.

Marcin99b commented 2 years ago

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

Marcin99b commented 2 years ago

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)

Marcin99b commented 2 years ago

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