Professional Documents
Culture Documents
Pragmatycznie
Maciej Aniserowicz
devstyle.pl
CQRS pragmatycznie
Troch historii
Ojcami CQRS s Udi Dahan i Greg Young wymienici eksperci wywodzcy
si ze wiatka .NET. Pod koniec pierwszej dekady XXI wieku okrelili kilka
prostych zasad, ktre potrafi znacznie uprzyjemni prac nad
skomplikowanymi systemami informatycznymi. Mona wspomnie, e wwczas
wyszukanie informacji na ten temat nie byo proste:
CQRS.init()
Command Query Responsibility Segregation czsto jest okrelane jako
wzorzec projektowy bd wzorzec architektoniczny. Mija si to z prawd. Dana
implementacja CQRS moe wykorzystywa zdefiniowane wzorce, jednak na
poziomie teoretycznym jest to po prostu podejcie do tworzenia
oprogramowania. Podejcie, ktre wpywa na system ju w fazie budowania
modelu reprezentujcego domen.
Po pierwsze (rys. 4A): piszemy zapytanie SQL, ktre finalnie aplikacja powinna
wykona na bazie danych. Piszemy je w edytorze tekstu, testowo rcznie
uruchamiamy na bazie i przechodzimy do kolejnego kroku.
Drugi krok (rys. 4B) to podczenie si profilerem do naszej bazy danych, aby
monitorowa tre zapyta wysyanych przez aplikacj. Dziki temu
zweryfikujemy, czy faktycznie wykonywany jest oczekiwany SQL.
2 {
8 }
2 {
5 }
2 {
5 }
2 {
7 }
Czy nie prociej bdzie zdefiniowa osobn klas skadow Read Modelu
obsugujc ten jeden konkretny scenariusz? Zawierajc wycznie dane
wymagane przez implementowany wanie ekran? Oczywicie, e tak!
3 from Advertisements a
6 where
7 a.IsArchived = 0
4 from Advertisements a
7 where
8 a.IsArchived = 0
2 {
5 }
2 var ad = session.Get<Advertisement>(adId);
3 user.InterestingAds.Add(ad);
4 session.Save(user);
2 {
5 }
2 {
3 }
2 {
3 }
3 {
5 }
2 {
4 }
Konkretna implementacja takiej szyny komend moe mie wiele postaci. Jedna
z nich to:
2 {
5 {
6 _handlersFactory = handlersFactory;
7 }
{
9
14
15
2 {
5 {
6 _simpleData = simpleData;
7 }
{
9
_simpleData.InterestingAds.Insert(
10
UserId: command.UserId, AdvertisementId: command.AdId
11
);
12
}
13
}
14
15
16
Podsumowanie
CQRS mona zaimplementowa na wiele sposobw. Przedstawione tutaj
podejcie pozwala na sprbowanie swoich si w praktycznie dowolnym
systemie. Nie wymaga ono zmiany bazy danych czy wprowadzania szyny
wiadomoci do projektu. Wystarczy znajomo refactoringu extract method to
class.
Chcesz wicej?
Zapraszam na devstyle.pl!
Do przeczytania!