Temat: CQRS czyli co....
1) Wzorzec poprawia wydajność systemu szczególnie w aspekcie prezentacji danych użytkownikowi.
Architekturę tworzy się po to, żeby poprawić wydajność programistów a nie programów.
2) Jaki masz problem z tym podziałem na parę maszyn?
http://codebetter.com/gregyoung/2010/02/16/cqrs-task-b...
"The largest possible benefit though is that it recognizes that their are different architectural properties when dealing with commands and queries … for example it allows us to host the two services differently eg: we can host the read service on 25 servers and the write service on two. "
Greg Young najwyraźniej uważa, że 2 interfejsy i 25 + 1 maszyn da zupełnie inny wynik niż jeden interface i 26 maszyn. A tymczasem wynik (wydajnościowy) będzie ten sam.. no może z tą różnicą, że dwa osobne serwisy trzeba będzie wdrażać dwa razy dłużej niż jeden.
3) Jak Ty rozwiązujesz kwestie prezentowania danych użytkownikowi w swoich aplikacjach, załóżmy że mamy system z Fakturami Jarka, masz repozytorium(FakturaRepozytorium) operujące na grubych encjach (Faktura), logika biznesowa rozsmarowana po elementach modelu domeny. Dostajesz następnie wymaganie: użytkownik ma możliwość wyświetlania faktur, faktury mają być prezentowane po 50 na stronie z możliwością nawigacji pomiędzy stronami(paginacja), użytkownik ma możliwość sortowania pokazywanych faktur po dacie utworzenia, numerze, kwocie. Gdzie będzie umieszczony kod realizujące to wymaganie?
View. Konkretnie w kontrolce wyświetlającej listę. Nawet jeśli takich faktur jest potencjalnie 1000 (co już świadczy o złym projekcie View) to i tak przesyłanie, sortowanie i stronicowanie zajmie nie więcej niż kilkadziesiąt - kilkaset milisekund.
4) MVP – kwestionujesz istnienie, czy sensowność?
Jeśli MVP rzeczywiście w serwisie tworzy konkretne dane dla konkretnych widoków to sensowność.
5) Mówiąc o modelu widoku, miałem na myśli klasy reprezentujące dane, które są wykorzystywane podczas prezentacji użytkownikowi, dla jasności na diagramie poniżej
jest to nazwane QueryDTO.
Pomysł jest głupi. Dlaczego ?
Cechy jakie posiada dobra obiektowa architektura:
- mało kodu
- mała ilość interfejsów i hierarchii
- brak klas / interfejsów poza hierarchiami
- brak specjalizowanych rozwiązań.
W skrócie: dobra architektura to taka która pozwala na szybkie tworzenie banalnego w analizie i rozszerzaniu, niezawodnego kodu.
A teraz popatrzmy sobie na query DTO. To są w zasadzie dwie odrębne aplikacje. W konsekwencji system będzie wymagać napisania dwukrotnie więcej kodu niż w podejściu 'tradycyjnym'.
Będzie w nim dwa razy więcej błędów, będzie powstawać dwa razy dłużej i co najmniej dwa razy dłużej będzie trwać wdrażanie do niego programisty.
A teraz zapytaj się kogoś, czy chce dostać system dwa razy później za dwukrotnie wyższą cenę ale działający 25% szybciej (Bo tak na prawdę to w żadnym razie nie będzie szybszy, dlaczego właściwie miałby być ? Może natomiast być wolniejszy - dane widoków będą obrabiane na serwerze a nie na kliencie)
Jakub Wojt edytował(a) ten post dnia 05.04.12 o godzinie 10:19