SlideShare a Scribd company logo
CQRS w PHP?
Jak ugryźć
whoami
grzegorz.stawarczyk@grupablix.pl | stawarczyk.pl
Grzegorz Stawarczyk
Lead PHP Developer
CQS
1. Oddzielne metody zapisu i odczytu


2. Metoda zapisująca dane (Command method) nie zwraca
odpowiedzi


3. Metoda odczytująca dane (Query method) nie mody
fi
kuje ich.


Kilkukrotne wywołanie metody odczytu zwróci zawsze ten sam
rezultat.
CQS
CQRS
CQRS is simply the creation of two objects where there
was previously only one.


Greg Young
CQRS
CQRS vs CQS
1. CQS na poziomie kodu


2. CQRS na poziomie architektury
Command Query Responsibility Segregation
Command Query Separation
Dziękuję za uwagę :)
To wszystko!
CQRS
CQRS
1. Command - Do something


2. Handler


3. Bus


4. Query - Ask for something


5. Handler


6. Bus
CQRS
1. Command - Do something


2. Handler


3. Bus


4. Query - Ask for something


5. Handler?


6. Bus?
CQRS
1. Command - Do something


2. Handler


3. Bus


4. Query - Ask for something


5. Handler?


6. Bus?
CQRS
1. Command


2. Query


3. Handler


4. Command Bus


5. Event


6. Event Bus


7. Event Sourcing


8. Projection


9. Eventual Consistency


10. DDD
CQRS
1. Command


2. Query


3. Handler


4. Command Bus


5. Event


6. Event Bus


7. Event Sourcing


8. Projection


9. Eventual Consistency


10. DDD
MVC
MVC
MVC
*Deadline Driven Development
CQRS
Query Command
Command
Co ma wydarzyć
 
się w aplikacji
Co wydarzyŁO się w aplikacji
Event
Czy Handler może zwrócić dane
Nie*
Potrzebuje ID - jak żyć?
A całą encję?
Command Bus vs Event Bus
CommandBus EventBus
Ilość handlerów 1 <0, n>
Może
zwracać wartość?
Nie Nie
Może być
asynchroniczny?
Może być Może być
Po co mi Rozkazy i Zdarzenia?
1. Bardziej czytelny system - akcja -> reakcja


2. Idziemy w kierunku języka wszechobecnego


3. SRP - Single Responsibility Principle


4. OCP - Open Close Principle


5. High Cohesion (GRASP)
Asynchroniczny Handler
1. Długie operacje nie blokują odpowiedzi dla użytkownika


2. Mogą wykonywać się
 
na innej maszynie


3. Możemy użyć innej aplikacji, na przykład napisanej w innym języku


4. Async to również dodatkowe problemy :)
Jedna Baza Danych
Read Model - Query
1. Przydaje się
 
wiedza z budowania zapytań SQL


2. ORM nie zawsze jest dobrym wyjściem


3. Możemy wykorzystać widoki w SQL


"Select * From Tabela" jestem mistrzem SQL’a :)
Warstwa Cache
Middleware
Kiedy nie używać CQRS
1. Aplikacje typu CRUD


2. Prosta logika biznesowa
Kiedy używać CQRS
1. Skomplikowania logika biznesowa


2. Aplikacja sterowana zadaniami - task based UI


3. Potrzeba optymalizacji / skalowania strony zapisu lub odczytu


4. Równoległa praca w zespole - bardziej doświadczone osoby powinny
skupić
 
się
 
na stronie zapisu, a mniej doświadczone na stronie odczytu
Plusy
1. Czytelniejsza architektura aplikacji


2. Łatwiejsze wydzielenie części synchro do asynchronicznej


3. Łatwiejsze skalowanie aplikacji


4. Jeden kod niezależnie od interfejsu wejściowego (API/UI, CLI, consumer)
Minusy
1. Synchronizacja baz danych read i write - spójność
 
ostateczna


2. Dodatkowa trudność
 
dla początkujących
Jakie mamy biblioteki
1. league/tactican - nie rozwijana od 2019


2. prooph/service-bus


3. simple-bus/message-bus


4. symfony/messenger
CQRS u nas
return $this->createQueryBuilder('sli')

->select(sprintf('NEW %s(sl.id, sli.quantity, sli.price, sli.name, sli.bought, sli.properties, :lea
fl
etId, :pageNumber, :type)', PreviousShoppingListItemForLea
fl
etPageDto::class
->join('sli.lea
fl
etPageShoppingListItem', 'lpsli')

->join('sli.shoppingList', 'sl')

->join('lpsli.lea
fl
etPage', 'lp')

->where('lp.id = :lpId')

->andWhere('sli instance of :type')

->setParameter('lpId', $previousLea
fl
etPageId)

->setParameter('lea
fl
etId', $newLea
fl
etId)

->setParameter('pageNumber', $newPageNumber)

->setParameter('type', $type)

->getQuery()

->execute()

;
Co dalej?
1. Read DB


2. DDD


3. Event Sourcing
Q& A
Dziękuję
grzegorz.stawarczyk@grupablix.pl


stawarczyk.pl
Grzegorz Stawarczyk
Lead PHP Developer

More Related Content

What's hot

Quality seed production nsc on 1.11.2018
Quality seed production  nsc on 1.11.2018Quality seed production  nsc on 1.11.2018
Quality seed production nsc on 1.11.2018
Abhishek Malpani
 
Advances breeding of Citrus
 Advances breeding of Citrus Advances breeding of Citrus
Advances breeding of Citrus
GANGARAM RANA
 
Trees and plants
Trees and plantsTrees and plants
Trees and plants
vishwa kelawala
 
Asparagus
AsparagusAsparagus
Asparagus
Shubham Kumar
 
Trees presentation (1)
Trees presentation (1)Trees presentation (1)
Trees presentation (1)
chunnuchauhan
 
Under expoited leafy vegetables
Under expoited leafy vegetablesUnder expoited leafy vegetables
Under expoited leafy vegetables
Shashank Shekhar Solankey
 
DESCRIPTION AND IDENTIFICATION OF VARIETIES IN PEAR
DESCRIPTION AND  IDENTIFICATION OF VARIETIES IN PEARDESCRIPTION AND  IDENTIFICATION OF VARIETIES IN PEAR
DESCRIPTION AND IDENTIFICATION OF VARIETIES IN PEAR
Balamurugan K
 
Shrubs found in kashmir
Shrubs found in kashmirShrubs found in kashmir
Shrubs found in kashmir
Seerat Ameen
 
KRISHI VIGYAN KENDRA PROPSAL case study
KRISHI VIGYAN KENDRA PROPSAL case studyKRISHI VIGYAN KENDRA PROPSAL case study
KRISHI VIGYAN KENDRA PROPSAL case study
Praveen Mukati
 
Apple Breeding Approaches
Apple Breeding ApproachesApple Breeding Approaches
Apple Breeding Approaches
Tawseef Baba
 
Leafy vegetables
Leafy vegetablesLeafy vegetables
Leafy vegetables
ASHISH KUMAR MAURYA
 
History of fruit breeding
History of fruit breedingHistory of fruit breeding
History of fruit breeding
srikaanth akshay
 
Potato production in Bangladesh presentation
Potato production in Bangladesh presentationPotato production in Bangladesh presentation
Potato production in Bangladesh presentation
Abul Hasnat Solaiman
 
Citrus
CitrusCitrus
Citrus
MANDEEP KAUR
 
Spanish garden
Spanish gardenSpanish garden
Spanish garden
Self-employed
 
Tomato breeding
Tomato breedingTomato breeding
Tomato breeding
ANGRAU
 
Production technology of okra
Production technology of okraProduction technology of okra
Production technology of okra
vanisree Padmanabhan
 
Guava and its prouduction technology
Guava and its prouduction technologyGuava and its prouduction technology
Guava and its prouduction technology
Shahzad Ali
 
Production technology of broccoli
Production technology of broccoliProduction technology of broccoli
Production technology of broccoli
University of horticultural sciences, Bagalkote
 
Cultivation oF jack fruit
Cultivation oF jack fruitCultivation oF jack fruit
Cultivation oF jack fruit
DavinderHanda
 

What's hot (20)

Quality seed production nsc on 1.11.2018
Quality seed production  nsc on 1.11.2018Quality seed production  nsc on 1.11.2018
Quality seed production nsc on 1.11.2018
 
Advances breeding of Citrus
 Advances breeding of Citrus Advances breeding of Citrus
Advances breeding of Citrus
 
Trees and plants
Trees and plantsTrees and plants
Trees and plants
 
Asparagus
AsparagusAsparagus
Asparagus
 
Trees presentation (1)
Trees presentation (1)Trees presentation (1)
Trees presentation (1)
 
Under expoited leafy vegetables
Under expoited leafy vegetablesUnder expoited leafy vegetables
Under expoited leafy vegetables
 
DESCRIPTION AND IDENTIFICATION OF VARIETIES IN PEAR
DESCRIPTION AND  IDENTIFICATION OF VARIETIES IN PEARDESCRIPTION AND  IDENTIFICATION OF VARIETIES IN PEAR
DESCRIPTION AND IDENTIFICATION OF VARIETIES IN PEAR
 
Shrubs found in kashmir
Shrubs found in kashmirShrubs found in kashmir
Shrubs found in kashmir
 
KRISHI VIGYAN KENDRA PROPSAL case study
KRISHI VIGYAN KENDRA PROPSAL case studyKRISHI VIGYAN KENDRA PROPSAL case study
KRISHI VIGYAN KENDRA PROPSAL case study
 
Apple Breeding Approaches
Apple Breeding ApproachesApple Breeding Approaches
Apple Breeding Approaches
 
Leafy vegetables
Leafy vegetablesLeafy vegetables
Leafy vegetables
 
History of fruit breeding
History of fruit breedingHistory of fruit breeding
History of fruit breeding
 
Potato production in Bangladesh presentation
Potato production in Bangladesh presentationPotato production in Bangladesh presentation
Potato production in Bangladesh presentation
 
Citrus
CitrusCitrus
Citrus
 
Spanish garden
Spanish gardenSpanish garden
Spanish garden
 
Tomato breeding
Tomato breedingTomato breeding
Tomato breeding
 
Production technology of okra
Production technology of okraProduction technology of okra
Production technology of okra
 
Guava and its prouduction technology
Guava and its prouduction technologyGuava and its prouduction technology
Guava and its prouduction technology
 
Production technology of broccoli
Production technology of broccoliProduction technology of broccoli
Production technology of broccoli
 
Cultivation oF jack fruit
Cultivation oF jack fruitCultivation oF jack fruit
Cultivation oF jack fruit
 

Similar to Jak ugryźć cqrs w php?

Shall we play a game? PL version
Shall we play a game? PL versionShall we play a game? PL version
Shall we play a game? PL version
Maciej Lasyk
 
Pułapki programowania obiektowego
Pułapki programowania obiektowego Pułapki programowania obiektowego
Pułapki programowania obiektowego
Adam Sawicki
 
Piątek z XSolve - TravisCI & Continuous Delivery
Piątek z XSolve - TravisCI & Continuous DeliveryPiątek z XSolve - TravisCI & Continuous Delivery
Piątek z XSolve - TravisCI & Continuous Delivery
XSolve
 
Złam zasady i stwórz wydajny stos IP przy użyciu DPDK
Złam zasady i stwórz wydajny stos IP przy użyciu DPDKZłam zasady i stwórz wydajny stos IP przy użyciu DPDK
Złam zasady i stwórz wydajny stos IP przy użyciu DPDK
Semihalf
 
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
allegro.tech
 
Zwiększanie produktywności programisty php (v2)
Zwiększanie produktywności programisty php (v2)Zwiększanie produktywności programisty php (v2)
Zwiększanie produktywności programisty php (v2)
adamhmetal
 
Zwiększanie produktywności programisty php
Zwiększanie produktywności programisty phpZwiększanie produktywności programisty php
Zwiększanie produktywności programisty phpadamhmetal
 
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-PolskaModsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-PolskaLeszek Mi?
 
Praktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlPraktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPl
Sebastian Marek
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowych
Tomasz Borowski
 
Info meet pomiary wydajności
Info meet pomiary wydajnościInfo meet pomiary wydajności
Info meet pomiary wydajnościmagda3695
 
Technologie przetwarzania danych by ZAiIO
Technologie przetwarzania danych by ZAiIOTechnologie przetwarzania danych by ZAiIO
Technologie przetwarzania danych by ZAiIO
Arkadiusz Nowakowski
 
Skalowanie PostgreSQL @ DBConf.PL 2014
Skalowanie PostgreSQL @ DBConf.PL 2014Skalowanie PostgreSQL @ DBConf.PL 2014
Skalowanie PostgreSQL @ DBConf.PL 2014
Filip Rembialkowski
 
Wprowadzenie do PHPUnit
Wprowadzenie do PHPUnitWprowadzenie do PHPUnit
Wprowadzenie do PHPUnit
Michał Kowalik
 

Similar to Jak ugryźć cqrs w php? (17)

Shall we play a game? PL version
Shall we play a game? PL versionShall we play a game? PL version
Shall we play a game? PL version
 
CruiseControl.rb
CruiseControl.rbCruiseControl.rb
CruiseControl.rb
 
Pułapki programowania obiektowego
Pułapki programowania obiektowego Pułapki programowania obiektowego
Pułapki programowania obiektowego
 
Piątek z XSolve - TravisCI & Continuous Delivery
Piątek z XSolve - TravisCI & Continuous DeliveryPiątek z XSolve - TravisCI & Continuous Delivery
Piątek z XSolve - TravisCI & Continuous Delivery
 
Złam zasady i stwórz wydajny stos IP przy użyciu DPDK
Złam zasady i stwórz wydajny stos IP przy użyciu DPDKZłam zasady i stwórz wydajny stos IP przy użyciu DPDK
Złam zasady i stwórz wydajny stos IP przy użyciu DPDK
 
Php5
Php5Php5
Php5
 
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
 
Torquebox
TorqueboxTorquebox
Torquebox
 
Zwiększanie produktywności programisty php (v2)
Zwiększanie produktywności programisty php (v2)Zwiększanie produktywności programisty php (v2)
Zwiększanie produktywności programisty php (v2)
 
Zwiększanie produktywności programisty php
Zwiększanie produktywności programisty phpZwiększanie produktywności programisty php
Zwiększanie produktywności programisty php
 
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-PolskaModsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
 
Praktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPlPraktyczne code reviews - PHPConPl
Praktyczne code reviews - PHPConPl
 
Produkcja aplikacji internetowych
Produkcja aplikacji internetowychProdukcja aplikacji internetowych
Produkcja aplikacji internetowych
 
Info meet pomiary wydajności
Info meet pomiary wydajnościInfo meet pomiary wydajności
Info meet pomiary wydajności
 
Technologie przetwarzania danych by ZAiIO
Technologie przetwarzania danych by ZAiIOTechnologie przetwarzania danych by ZAiIO
Technologie przetwarzania danych by ZAiIO
 
Skalowanie PostgreSQL @ DBConf.PL 2014
Skalowanie PostgreSQL @ DBConf.PL 2014Skalowanie PostgreSQL @ DBConf.PL 2014
Skalowanie PostgreSQL @ DBConf.PL 2014
 
Wprowadzenie do PHPUnit
Wprowadzenie do PHPUnitWprowadzenie do PHPUnit
Wprowadzenie do PHPUnit
 

Jak ugryźć cqrs w php?