Implemntacja CQRS i nazewnictwo

0

Typowa implementacja CQRS wygląda mniej więcej tak: Użytkownik wysyła jakieś command albo query, potem to wpada do busa, który używa odpowiedniego handlera, obsługującego to zapytanie i w sumie tyle. Brzmi prosto i sesnownie tylko jest jeden taki problem, że powstają klasy o długich i skomplikowanych nazwach typu "CreateOrderCommandHandler implements CommandHandler<CreateOrderCommand>". Dlatego właśnie szukam jakiś sensownych alternatyw dla nazw i póki co to wymyśliłem coś takiego: Od użytkownika leci po prostu jakieś dto typu CreateOrderDto/ReadAllOrdersDto, też wpada do busa i zamiast handlera jest wyszukiwana odpowiednia komenda/query np. CreateOrderCommand, która implementuje interface Command<T> z metodą execute(T t) gdzie T to jakieś dto. Co o tym myślicie i jakiego podejścia używacie?

2

Właściwie nigdy nie rozumiałem nazywania klas formatem {Encja}{WzorzecProjektowy} - dlaczego zamiast CreateOrderCommandHandler nie nazwiesz klasy po prostu CreateOrder? Brzmi jak rozwiązanie problemu :-)

4

Ja jestem przeciwnikiem takiego zbyt technicznego nazewnictwa, i skupiam się na tym aby kod (szczególnie w warstwie domeny) jak najlepiej odzwierciedlał nomenklaturę biznesową. Wtedy taki kod czyta się bardziej "naturalnie", i łatwo jest ogarnąć kontekst procesu biznesowego.

Po części zgadzam się więc z @Patryk27, ale nie do końca. Dodanie Handler na końcu ma sens bo opisuje że taka klasa obsługuje konkretne polecenie (command). Dodawanie Command na końcu nazwy polecenia takiego sensu już nie ma moim zdaniem. Polecenie to polecenie, i z samej swojej nazwy jasno to sygnalizuje. CreateOrder nie zostawia wiele do interpretacji i wiadomo że jest to polecenie. Handler takiego polecenia wtedy odpowiednio może nazywać się CreateOrderHandler.

Ale nazwanie handlera CreateOrder byłoby mylące, bo nazwa sugeruje że to command a nie handler.

0

CreateOrder i CreateOrderUseCase

1

Dla mnie to trochę dziwne nazywać klasę CreateOrder. Nazwy klas powinny chyba być rzeczownikami bo reprezentują obiekty. Więc dopisanie handler na końcu dla mnie jest właściwe tym bardziej jak implementuje interface IRequestHandler :p

1
Patryk27 napisał(a):

Właściwie nigdy nie rozumiałem nazywania klas formatem {Encja}{WzorzecProjektowy}

Nie nazwałeś nigdy klasy ze słowem Factory? :P Ja tak robię i nie widzę nic w tym złego

Ale też rozumiem, że np jakieś Proxy czy Bridge w nazwie klasy to nie bardzo :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1