Wpis z mikrobloga

W CQRS command bus ma za zadanie użyć odpowiedniego handlera do danej komendy. Wszystko ok tylko raz, że nie bardzo wiem jak to sensownie zaimplementować (jakaś mapa z kluczem w postaci command i wartością jako handler? Widziałem też implementacje oparte na refleksji.) a dwa, że nie bardzo widzę sens tej dodatkowej warstwy, bo przecież taki np rest controller może mieć wstrzykniętego po prostu odpowiedniego handlera i żaden command bus nie jest potrzebny albo ja czegoś nie widzę. (np. CreateUserController i wstrzyknięty do niego CreateUserHandler i tyle.)
#programowanie #naukaprogramowania #programista15k #java
  • 5
  • Odpowiedz
@Edelner: W PHP najczęściej spotkałem się z Command Busem opartym na refleksji, jednak jeśli nie chcesz się w to bawić i z jakiegoś powodu wykorzystywać gotowych bibliotek to możesz zrobić prostszą implementację.
Sam nie jestem fanem CQRS'a, może dlatego że nie spotkałem się z kodem gdzie dawałby ten wzorzec realną korzyść, jednak jedną z możliwości jest bardzo proste wyniesienie operacji zapisu na kolejkę i wykonywanie operacji asynchronicznie.

Ważne jest do
  • Odpowiedz
@Edelner: @Saly: CQRS jest fajny w mocno równoległych lub rozproszonych systemach kiedy interesuje nas log transakcji i na nim aplikacja pracuje, a jednocześnie musimy znać stan finalny.

W zasadzie w większości innych przypadków to jest raczej przerost formy nad treścią.
  • Odpowiedz
@Edelner: W CQRS nie chodzi o to że masz klasę CommandBus, XyzCommand i XyzCommandHandler, to szczegół implementacyjny. W tym chodzi o to, że dla operacji odczytu i zapisu posługujesz się różnymi modelami.

Przy zapisie masz jakieś reguły biznesowe i twoim głównym zadaniem jest ich ochrona żeby model nie znalazł się w nieprawidłowym stanie, np. nie można dodać danego produktu zamówienia bo cośtam, nie można zamknąć zamówienia bo cośtam, nie można anulować zamówienia bo zostało już wysłane itp. Masz jakieś if-y, które te reguły sprawdzają, mogą być tam agregaty, value objecty z DDD i inne cuda wianki. Generalnie dążysz do wysokiej enkapsulacji.

Z kolei przy odczycie
- te fi-y
  • Odpowiedz