Kiedy stosować wzorzec projektowy CQRS?
Mój zespół i ja dyskutowaliśmy o użyciu wzorca projektowego CQRS (Command Query Responsibility Segregation) i nadal staramy się ocenić zalety i wady jego używania. Według: http://martinfowler.com/bliki/CQRS.html
Nie widzieliśmy jeszcze wystarczająco dużo zastosowań CQR w terenie, aby być pewnym że rozumiemy jego wady i zalety
Więc jak myślicie, kiedy problem wymaga użycia CQRS?
7 answers
CQRS nie jest wzorcem, który obejmuje całą aplikację.
Jest to koncepcja, która opiera się na Domain Driven Design (DDD). Ważnym strategicznym pojęciem DDD jest tzw. kontekst Ograniczony .
W typowej aplikacji istnieje wiele ograniczonych kontekstów, z których każdy może być zaimplementowany w sposób, w jaki ma to sens. Na przykład
- Zarządzanie użytkownikami - > CRUD
- Fakturowanie - > CRUD
- zarządzanie polisami ubezpieczeniowymi (domena Podstawowa) - > CQRS
- ...
To prawdopodobnie nie odpowiada na twoje pytanie, ale może dać trochę więcej wglądu w temat. Szczerze mówiąc, nie sądzę, aby można było na to odpowiedzieć bez uwzględnienia specyfiki projektu, a nawet wtedy rzadko zdarza się coś w rodzaju określonej najlepszej praktyki.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-19 16:13:13
Cóż krytycy CQRL mogą powiedzieć, że CQRS jest skomplikowany i to może być prawda.
Oczywiście jest to dodawanie narzutu na rozwój prostej aplikacji CRUD w stylu CQRS, więc rozważyłbym użycie CQRS tylko w następujących przypadkach:
- duży zespół - możesz łatwo podzielić zadania programistyczne między ludzi, jeśli wybrałeś architekturę CQRS. Twoi najlepsi ludzie mogą pracować nad logiką domeny, pozostawiając zwykłe rzeczy mniej wykwalifikowanym programistom.
- trudny biznes logika - CQRS zmusza do unikania mieszania logiki domeny i operacji infrastrukturalnych.
- skalowalność ma znaczenie - dzięki CQRS możesz osiągnąć doskonałą wydajność odczytu i zapisu, obsługę poleceń można skalować na wielu węzłach, a ponieważ zapytania są operacjami tylko do odczytu, można je zoptymalizować pod kątem szybkich operacji odczytu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-25 00:47:02
Gdy masz złożoną lub twardą domenę biznesową i:
- z event sourcing; chcesz fajny sposób testowania logiki
- z event sourcing; chcesz udowodnić swoje zachowania poprzez testowanie i rozumowanie
- masz wielu klientów lub konsumentów swojej usługi domenowej (nie tylko jednego serwera www)
Lub masz użytkowników, którzy muszą działać na wspólnych danych:
- i chcesz sformalizować koncepcje scalania danych twojej domeny
- lub ty chcesz zastosować logikę do scalania zdarzeń
Lub masz wymagania dotyczące skalowalności:
- stosujesz wzorzec jako wzorzec denormalizacji, który usuwa wąskie gardła Chcesz skalować poziomo, a nie pionowo]}
Lub masz problemy z wydajnością (inna strona skalowalności):
- np. musisz przenieść swoją architekturę do architektury opartej na zdarzeniach - CQRS jako wzorzec jest dobrym krokiem.
Albo masz zespół, który jest fizycznie disjunct:
- np. część zespołu jest w innym kraju Jeśli chcesz oddzielić modele odczytu od strony zapisu rzeczy (sagas, domain, CRUD), to trudno jest uzyskać komunikację twarzą w twarz, więc chcesz oddzielić modele odczytu od strony zapisu (sagas, domain, CRUD).]}
To nie CQRS jest zbyt skomplikowane, to komputery, które są.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-20 15:20:15
Kiedy używać wzorca projektowego CQRS?
Wzorzec architektury CQRS może być używany, gdy trudno jest uzyskać z repozytoriów Zapytanie o wszystkie dane, które użytkownicy muszą wyświetlić. Jest to szczególnie ważne, gdy UX design tworzy widoki danych, które przecinają kilka typów agregatów i wystąpień. Im bardziej wyrafinowana jest Twoja domena, tym bardziej wydaje się to prawdą.
Gdy nie nadaje się do kompromisu w projektowaniu UX, użycie CQRS próbuje złagodzić problemy związane z innymi rozwiązaniami, np.:
- wymaganie, aby klienci korzystali z wielu repozytoriów do pobierania wszystkich zagregowanych instancji; lub
- projektowanie wyspecjalizowanych finderów na różnych repozytoriach w celu zebrania niepołączonych danych za pomocą jednego zapytania.
Podsumowując: używaj CQRS, gdy trudne do wyszukania dane z repozytoriów muszą być wyświetlane przez użytkowników, co zdarza się im bardziej wyrafinowana jest Twoja domena.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-30 10:09:07
Z mojego punktu widzenia dodaje dwie główne korzyści.(Wśród wielu innych)
- Ekstremalna zdolność skalowania
- bardzo przydatne, gdy chodzi o distibuted zespołów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-11 14:17:27
W realnym świecie scenario CQRS może być przydatny, gdy masz klienta front end / web service, który potrzebuje dużo danych z wielu domen i pobieranie tych danych z bazy danych zajmuje dużo czasu.
W takim przypadku można rozważyć utworzenie oddzielnego modelu odczytu, który będzie szybciej rozwijany i może mieć szybszy czas wykonania.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-06 09:25:13
Oto powody, dla których należy stosować CQR:
- skalowalność (odczyt przekracza zapis, więc wymagania skalowania dla każdego różnią się i można je lepiej zaadresować)
- elastyczność (oddzielne modele odczytu / zapisu)
- zmniejszona złożoność (przeniesienie złożoności do oddzielnych problemów)
- skoncentruj się na domenie / biznesie
- ułatwia projektowanie intuicyjnych interfejsów użytkownika opartych na zadaniach
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-16 10:08:24