CQRS in der Praxis - Newsletter Double-Opt-In

PHP in DD
PHP in DDPHP Software Developers at PHPinDD
CQRS in der Praxis
NEWSLETTER DOUBLE-OPT-IN
MVC – Pattern
• 1979 formuliert
• Softwareentwurf für Desktop-Anwendungen
MVC – Pattern – klassisch
Controller
Model
View
View
ServerClient
MVC – Pattern – Web
Controller ModelView
ServerClient
Controller ModelView
MVC – Pattern – Web
ServerClient
Controller ModelView
MVC – Pattern – Web
MVC – Pattern – Web
ServerClient
Controller ModelView
Server
MVC – Pattern – Web
Client
Controller ModelView
MVC – Pattern – Web – Probleme
• Systemgrenze
• HTTP-Request
• Subject-Observer
• Single-Responsibility
MVC – Pattern – Web – Probleme
• HTTP-Request
• Subject-Observer
• Single-Responsibility
MVC – Pattern – Web – Probleme
• HTTP-Request
• Subject-Observer
• Single-Responsibility
MVC – Pattern – Web – Probleme
• HTTP-Request
• Single-Responsibility
Server
HTTP-Request
Client
Controller
Model
View
GET
Client Server
HTTP-Request
Read
Controller
Model
View
GET
Client Server
HTTP-Request
Read
Controller
Model
View
GET
Write
Controller
POST
Client Server
HTTP-Request
Read
Controller
Model
View
GET
Write
Controller
POST
Probleme
• HTTP-Request
• Single-Responsibility
Probleme
• Single-Responsibility
Client Server
Single-Responsibility
Read
Controller
Model
View
GET
Write
Controller
POST
Client Server
Single-Responsibility
Read
Controller
Model
View
GET
POST
Read
Handler
Write
Handler
Write
Controller
CQRS in der Praxis - Newsletter Double-Opt-In
Client Server
CQRS
Read
Controller
Model
View
GET
POST
Read
Handler
Write
Handler
Write
Controller
Client Server
CQRS – Command Query Responsibilty Segregation
Read
Controller
Model
View
GET
POST
Query
Handler
Command
Handler
Write
Controller
Livecoding
Newsletter Double-Opt-In – User Stories
• Als User kann ich meine E-Mail Adresse anmelden, um den Newsletter zu
erhalten.
• Als User erhalte ich eine E-Mail nach Anmeldung, um diese zu bestätigen.
• Als User kann ich die Bestätigungs-E-Mail erneut anfordern, um meine E-Mail
Adresse zu bestätigen.
• Als User kann ich meine E-Mail Adresse bestätigen, um die Anmeldung
abzuschließen.
• Als User erhalte ich eine Welcome E-Mail, sodass ich über den Abschluss der
Anmeldung informiert bin.
Client
CQRS + SOA – Our best practice
Query
Handler
Reposi-
tory
View
GET
POST
GetRequest
Handler
PostRequest
Handler
Called dynamically
Command
Handler
ReadService
Query
WriteService
Command
Called explicitly
Empfehlungen
• Einführung in CQRS
http://martinfowler.com/bliki/CQRS.html
• MVC in Webanwendungen
https://entwickler.de/online/php/model-view-controller-in-webanwendungen-
138762.html
• Wartbares Design dank CQRS
https://entwickler.de/online/development/wartbares-design-dank-cqrs-
139615.html
Empfehlungen
https://github.com/fortuneglobe/icehawk
Vielen Dank
• Slides abrufbar
http://www.phpind.de
• Beispiel-Projekt abrufbar
https://github.com/PHPinDD/cqrs-newsletter-double-opt-in
1 of 29

Recommended

Acceptance Testing - Automatisierte Web App Tests mit CasperJS by
Acceptance Testing - Automatisierte Web App Tests mit CasperJSAcceptance Testing - Automatisierte Web App Tests mit CasperJS
Acceptance Testing - Automatisierte Web App Tests mit CasperJSBjörn Wilmsmann
2.5K views33 slides
MVC 1.0: Zeitgemäße Webanwendungen in JavaEE by
MVC 1.0: Zeitgemäße Webanwendungen in JavaEEMVC 1.0: Zeitgemäße Webanwendungen in JavaEE
MVC 1.0: Zeitgemäße Webanwendungen in JavaEEOPEN KNOWLEDGE GmbH
989 views17 slides
SPA (Single Page Application) mit AngularJS und ASP.net Web API by
SPA (Single Page Application) mit AngularJS und ASP.net Web API SPA (Single Page Application) mit AngularJS und ASP.net Web API
SPA (Single Page Application) mit AngularJS und ASP.net Web API AllFacebook.de
3K views13 slides
Api services by
Api servicesApi services
Api servicesJan Hentschel
1.9K views19 slides
BizSpark goes Cloud by
BizSpark goes CloudBizSpark goes Cloud
BizSpark goes CloudPatric Boscolo
669 views48 slides
SQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreiben by
SQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreibenSQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreiben
SQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreibenJan Hentschel
866 views15 slides

More Related Content

What's hot

JUG MZ OSGi Lightning Talk by
JUG MZ OSGi Lightning TalkJUG MZ OSGi Lightning Talk
JUG MZ OSGi Lightning TalkThilo Käsemann
437 views17 slides
Creasoft-Akademie - Mobile Multiplattform Apps by
Creasoft-Akademie - Mobile Multiplattform AppsCreasoft-Akademie - Mobile Multiplattform Apps
Creasoft-Akademie - Mobile Multiplattform AppsCreasoft AG
1.4K views45 slides
Workshop Vue js by
Workshop Vue jsWorkshop Vue js
Workshop Vue jsHendrik Lösch
524 views103 slides
PrettyFaces: RESTful URLs für JSF by
PrettyFaces: RESTful URLs für JSFPrettyFaces: RESTful URLs für JSF
PrettyFaces: RESTful URLs für JSFChristian Kaltepoth
2.1K views26 slides
Azure Bootcamp Hamburg by
Azure Bootcamp Hamburg Azure Bootcamp Hamburg
Azure Bootcamp Hamburg Lennart Passig
991 views22 slides
Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks. by
Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.
Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.David Jardin
1.1K views24 slides

What's hot(15)

Creasoft-Akademie - Mobile Multiplattform Apps by Creasoft AG
Creasoft-Akademie - Mobile Multiplattform AppsCreasoft-Akademie - Mobile Multiplattform Apps
Creasoft-Akademie - Mobile Multiplattform Apps
Creasoft AG1.4K views
Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks. by David Jardin
Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.
Nooku, Molajo & Co - Joomla! Distributionen. Oder Forks.
David Jardin1.1K views
Enterprise JavaBeans und Web Application by private
Enterprise JavaBeans und Web ApplicationEnterprise JavaBeans und Web Application
Enterprise JavaBeans und Web Application
private764 views
2FA4WP - Two Factor Authentification for WordPress by stk_jj
2FA4WP - Two Factor Authentification for WordPress2FA4WP - Two Factor Authentification for WordPress
2FA4WP - Two Factor Authentification for WordPress
stk_jj2.9K views
Einführung in HTTP/2 by RankSider
Einführung in HTTP/2 Einführung in HTTP/2
Einführung in HTTP/2
RankSider715 views
Umzug in die Cloud - flexible, dynamische Websites und Digital Marketing am B... by comspace GmbH & Co. KG
Umzug in die Cloud - flexible, dynamische Websites und Digital Marketing am B...Umzug in die Cloud - flexible, dynamische Websites und Digital Marketing am B...
Umzug in die Cloud - flexible, dynamische Websites und Digital Marketing am B...

Viewers also liked

CQRS basierte Architekturen mit Microservices by
CQRS basierte Architekturen mit MicroservicesCQRS basierte Architekturen mit Microservices
CQRS basierte Architekturen mit MicroservicesMichael Plöd
3.4K views38 slides
Event Sourcing: Einführung und Best Practices by
Event Sourcing: Einführung und Best PracticesEvent Sourcing: Einführung und Best Practices
Event Sourcing: Einführung und Best PracticesMichael Plöd
5.8K views74 slides
Wicket Kurzübersicht by
Wicket KurzübersichtWicket Kurzübersicht
Wicket KurzübersichtopenForce Information Technology GesmbH
1.6K views47 slides
Continuous Delivery @ FriendScout24 | Webinale 2012 by
Continuous Delivery @ FriendScout24 | Webinale 2012Continuous Delivery @ FriendScout24 | Webinale 2012
Continuous Delivery @ FriendScout24 | Webinale 2012Michael Maretzke
2.3K views33 slides
Microservices – die Architektur für Agile-Entwicklung? by
Microservices – die Architektur für Agile-Entwicklung?Microservices – die Architektur für Agile-Entwicklung?
Microservices – die Architektur für Agile-Entwicklung?Christian Baranowski
3.4K views33 slides
Event Sourcing für reaktive Anwendungen by
Event Sourcing für reaktive AnwendungenEvent Sourcing für reaktive Anwendungen
Event Sourcing für reaktive AnwendungenMichael Plöd
2.1K views36 slides

Viewers also liked(9)

CQRS basierte Architekturen mit Microservices by Michael Plöd
CQRS basierte Architekturen mit MicroservicesCQRS basierte Architekturen mit Microservices
CQRS basierte Architekturen mit Microservices
Michael Plöd3.4K views
Event Sourcing: Einführung und Best Practices by Michael Plöd
Event Sourcing: Einführung und Best PracticesEvent Sourcing: Einführung und Best Practices
Event Sourcing: Einführung und Best Practices
Michael Plöd5.8K views
Continuous Delivery @ FriendScout24 | Webinale 2012 by Michael Maretzke
Continuous Delivery @ FriendScout24 | Webinale 2012Continuous Delivery @ FriendScout24 | Webinale 2012
Continuous Delivery @ FriendScout24 | Webinale 2012
Michael Maretzke2.3K views
Microservices – die Architektur für Agile-Entwicklung? by Christian Baranowski
Microservices – die Architektur für Agile-Entwicklung?Microservices – die Architektur für Agile-Entwicklung?
Microservices – die Architektur für Agile-Entwicklung?
Event Sourcing für reaktive Anwendungen by Michael Plöd
Event Sourcing für reaktive AnwendungenEvent Sourcing für reaktive Anwendungen
Event Sourcing für reaktive Anwendungen
Michael Plöd2.1K views
Bessere Präsentationen by Michael Plöd
Bessere PräsentationenBessere Präsentationen
Bessere Präsentationen
Michael Plöd14.1K views
Anatomie von Microservice Landschaften by Michael Plöd
Anatomie von Microservice LandschaftenAnatomie von Microservice Landschaften
Anatomie von Microservice Landschaften
Michael Plöd2.3K views
Warum empfehle ich meinen Kunden das Spring Framework? by Michael Plöd
Warum empfehle ich meinen Kunden das Spring Framework? Warum empfehle ich meinen Kunden das Spring Framework?
Warum empfehle ich meinen Kunden das Spring Framework?
Michael Plöd3.8K views

Similar to CQRS in der Praxis - Newsletter Double-Opt-In

ASP.NET MVC 2 - Eine Einführung by
ASP.NET MVC 2 - Eine EinführungASP.NET MVC 2 - Eine Einführung
ASP.NET MVC 2 - Eine EinführungNETUserGroupBern
18 views31 slides
Creasoft Akademie - Deep Dive into ASP.NET MVC by
Creasoft Akademie - Deep Dive into ASP.NET MVCCreasoft Akademie - Deep Dive into ASP.NET MVC
Creasoft Akademie - Deep Dive into ASP.NET MVCCreasoft AG
1.8K views18 slides
Creasoft Akademie - Deep dive into ASP.NET MVC by
Creasoft Akademie - Deep dive into ASP.NET MVCCreasoft Akademie - Deep dive into ASP.NET MVC
Creasoft Akademie - Deep dive into ASP.NET MVCCreasoft AG
445 views18 slides
Die Flux Application Architecture - Facebooks Ansatz für Client-side Web Appl... by
Die Flux Application Architecture - Facebooks Ansatz für Client-side Web Appl...Die Flux Application Architecture - Facebooks Ansatz für Client-side Web Appl...
Die Flux Application Architecture - Facebooks Ansatz für Client-side Web Appl...OPEN KNOWLEDGE GmbH
1.2K views79 slides
2007 - Basta!: Nach soa kommt soc by
2007 - Basta!: Nach soa kommt soc2007 - Basta!: Nach soa kommt soc
2007 - Basta!: Nach soa kommt socDaniel Fisher
209 views39 slides
Heisec 2008 web 2.0 by
Heisec 2008 web 2.0Heisec 2008 web 2.0
Heisec 2008 web 2.0Johann-Peter Hartmann
671 views162 slides

Similar to CQRS in der Praxis - Newsletter Double-Opt-In(20)

Creasoft Akademie - Deep Dive into ASP.NET MVC by Creasoft AG
Creasoft Akademie - Deep Dive into ASP.NET MVCCreasoft Akademie - Deep Dive into ASP.NET MVC
Creasoft Akademie - Deep Dive into ASP.NET MVC
Creasoft AG1.8K views
Creasoft Akademie - Deep dive into ASP.NET MVC by Creasoft AG
Creasoft Akademie - Deep dive into ASP.NET MVCCreasoft Akademie - Deep dive into ASP.NET MVC
Creasoft Akademie - Deep dive into ASP.NET MVC
Creasoft AG445 views
Die Flux Application Architecture - Facebooks Ansatz für Client-side Web Appl... by OPEN KNOWLEDGE GmbH
Die Flux Application Architecture - Facebooks Ansatz für Client-side Web Appl...Die Flux Application Architecture - Facebooks Ansatz für Client-side Web Appl...
Die Flux Application Architecture - Facebooks Ansatz für Client-side Web Appl...
OPEN KNOWLEDGE GmbH1.2K views
2007 - Basta!: Nach soa kommt soc by Daniel Fisher
2007 - Basta!: Nach soa kommt soc2007 - Basta!: Nach soa kommt soc
2007 - Basta!: Nach soa kommt soc
Daniel Fisher209 views
Was kommt nach den SPAs by QAware GmbH
Was kommt nach den SPAsWas kommt nach den SPAs
Was kommt nach den SPAs
QAware GmbH5 views
HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg) by André Krämer
HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)
HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)
André Krämer542 views
Ein Blick in die Zukunft von in-STEP RED und objectiF RM by microTOOL GmbH
Ein Blick in die Zukunft von in-STEP RED und objectiF RMEin Blick in die Zukunft von in-STEP RED und objectiF RM
Ein Blick in die Zukunft von in-STEP RED und objectiF RM
microTOOL GmbH828 views
ASP.NET MVC by CodeInside
ASP.NET MVCASP.NET MVC
ASP.NET MVC
CodeInside1.3K views
Moderne Business Apps mit XAML - oder mit WPF für die Zukunft geplant by Christian Nagel
Moderne Business Apps mit XAML - oder mit WPF für die Zukunft geplantModerne Business Apps mit XAML - oder mit WPF für die Zukunft geplant
Moderne Business Apps mit XAML - oder mit WPF für die Zukunft geplant
Christian Nagel267 views
FMK2015: FileMaker 14 Webdirect by Michael Valentin by Verein FM Konferenz
FMK2015: FileMaker 14 Webdirect by Michael ValentinFMK2015: FileMaker 14 Webdirect by Michael Valentin
FMK2015: FileMaker 14 Webdirect by Michael Valentin
Verein FM Konferenz2.1K views
Evaluierung einer Hybris-Anbindung an Sitecore mittels Commerce Connect by comspace GmbH & Co. KG
Evaluierung einer Hybris-Anbindung an Sitecore mittels Commerce ConnectEvaluierung einer Hybris-Anbindung an Sitecore mittels Commerce Connect
Evaluierung einer Hybris-Anbindung an Sitecore mittels Commerce Connect
Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa... by Community ITmitte.de
Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...
Ringvorlesung: FIO Systems AG stellt Projektziel zum Thema Software Design Pa...
AdminCamp 14: Make your IBM Connections deployment your own - Customize it! by Klaus Bild
AdminCamp 14: Make your IBM Connections deployment your own - Customize it!AdminCamp 14: Make your IBM Connections deployment your own - Customize it!
AdminCamp 14: Make your IBM Connections deployment your own - Customize it!
Klaus Bild803 views
Never Code Alone: Von Symfony Forms zu einer SPA auf APIs by Stefan Adolf
Never Code Alone: Von Symfony Forms zu einer SPA auf APIsNever Code Alone: Von Symfony Forms zu einer SPA auf APIs
Never Code Alone: Von Symfony Forms zu einer SPA auf APIs
Stefan Adolf213 views
Oracle Private & Public Database-as-a-Service by oraclebudb
Oracle Private & Public Database-as-a-ServiceOracle Private & Public Database-as-a-Service
Oracle Private & Public Database-as-a-Service
oraclebudb1K views

CQRS in der Praxis - Newsletter Double-Opt-In

Editor's Notes

  1. Vorstellen Holger – CIO FORTUNEGLOBE u. HEAD of FORTUNE SOLUTIONS Vorstellen mich Phpind.de Warum CQRS? Suche nach Alternativen zum MVC nach unzähligen Legacy-Anwendungen mit Zend, Symfony und eigenem MVC-Framework Schmerzen beim Refactoring und dem Versuch andere Ansätze zu verknüpfen Für uns die größte Annäherung an das HTTP-Protokoll und die beste Art andere Ansätzen wie DDD, EventSourcing oder SOA anzuknüpfen Was zeigen wir? Kritische Betrachtung des MVC-Patterns in Webanwendungen Theoretische Vorstellung CQRS als Alternative Live Coding
  2. 1979 formuliert norweg. Informatiker den Begriff Model-View-Controller Mehr als 40 Jahre alt und ursprünglich für Desktopanwendungen
  3. Frage stellen: Wie funktioniert das MVC ursprünglich? Klassischer Anwendungsfall sind Multiple Document-Interface-Applikationen Nutzer kann mehrere Fenster (Views) gleichzeitig öffnen Wenn sich Model ändert, müssen alle Views aktualisiert werden Somit wird Nutzer wiederholtes hin-und herblättern zw. 2 Fenstern erspart Dies passiert über eine Subject-Observer-Beziehung, bei dem alle Objekte schon fest verbunden sind View 1 -> Änderung an Controller -> ändert Zustand des Models -> Views werden aktualisiert
  4. Problem 1: Webanwendungen sind Client-Server-Anwendungen -> Trennung durch Systemgrenze Problem 2: Webanwendungen sind Request-Basiert -> Objektgraph zum Zeitpunkt der Änderung noch gar nicht vorhanden -> Wir müssen erstmal überlegen wie wir die Objekte erzeugen Was passiert nun im Web - Klick
  5. Klick auf Button im Browser HTTP-Request wird an Server gesendet -> Controller soll darauf angemessen reagieren Problem: Welcher Controller überhaupt. -> Was tun wir? – Routing! -> Frameworks machen das über sog. FrontController -> dieser führt erst das Routing durch und ruft dann den Controller auf Klick
  6. Controller muss nun mit einem Model sprechen – aber welches Model? Aus dem Request muss erstmal herausgefunden werden, welches Model geladen werden muss – machen die Controller Im klass. MVC ist es gar nicht vorgesehen entscheiden zu müssen, welches Model geladen werden muss Im Web muss der Controller aber diese Verantwortung übernehmen -> fraglich ob es sinnvoll ist die Verantwortlichkeit hineinzudichten Klick
  7. Nun müsste Model Views über Änderung informieren Auf Server existieren die Views nur als HTML String Erst beim Rendern im Client bekommen sie echtes Verhalten View bekommt nun eine andere Bedeutung – statt von einem GUI-Element sprechen wir nun von ganzen HTML-Seiten Und Client kann nur Daten per HTTP abrufen -> Subject-Observer-Muster kann nicht sinnvoll umgesetzt werden Klick
  8. Also was tun wir? Wir informieren den Controller über die Zustandsänderung Controller soll nun entscheiden welche View dargestellt werden soll, obwohl man das gar nicht immer genau wissen kann POST vs. GET und darf User eine Seite überhaupt sehen, ohne eingeloggt zu sein (Redirect auf Loginseite) Ergebnis: Controller hat plötzlich 2 Aufgaben: 1 soll „Kommando“ an die Applikation verarbeiten und 2 er soll entscheiden welche View anzuzeigen ist Verstoss gegen Single-Responsibility-Konzept!
  9. Probleme zusammenfassen Trennung durch Systemgrenze – wegen Client-Server-Architektur Kommunikation Requestbasiert durch HTTP Subject-Observer-Beziehung kann nicht sinnvoll umgesetzt werden, da Model nicht mit View kommunizieren kann Verstoss gegen Single-Responsibility-Prinzip, da Controller mehr als 1 Aufgabe hat Controller verantwortlich für das Laden des Models Fragen bis hier hin? 4 Probleme bewerten Systemgrenze können wir nicht ändern
  10. HTTP-Request können wir auch nicht ändern Aber wir können ihn in den Mittelpunkt rücken
  11. Subject-Observer entfällt
  12. Bleibt noch Single-Responsibility Zentrales Prinzip für das Design wartbarer Software Irgendjemand muss die Models kennen, aber muss es der Controller sein Somit rücken der HTTP-Request und das Single-Responsibility Prinzip in den Fokus Schauen wir uns das genauer an
  13. GET-Request beim Seitenaufruf bspw. durch Linkklick GET-Request ist ein reiner Lesezugriff
  14. Sagen wir GET-Request wird an einen Read Controller delegiert Read Controller lädt Model und fragt Daten ab, rendert View
  15. POST-Requests beim Absenden von Formularen POST-Requests sind Schreibzugriffe und ändern den Zustand einer Applikation Problem: Zustand des Models wurde geändert Controller darf nur schreiben – was nun?
  16. Senden Redirect auf den entsprechenden Read-Controller Redirect ist eine gültige HTTP-Response in der ein Location Header gesendet wird Client wird angewiesen einen neuen GET-Request zu senden Was haben wir gewonnen?
  17. Wir behandeln die unterschiedlichen HTTP-Requests getrennt HTT-Protokoll wird besser abgebildet
  18. Was war jetzt mit Single-Responsibility? Schauen wir uns den Controller nochmal an
  19. Aufgaben des Controllers -Kommando entgegennehmen - Model laden - Entscheiden welche View gerendert wird Kommando behandeln bleibt die zentrale Aufgabe Entscheidung View entfällt, da immer nur 1 möglich Bleibt als 2. Aufgabe das Laden des Models Was wäre wenn wir diese Aufgabe delegieren?
  20. Schalten wir nach vor den Controller einen Handler der den Request verarbeitet Der Handler delegiert nun das Laden des Models jetzt an den Controller Somit hat der Controller nur noch 1 Aufgabe
  21. Super alle Probleme gelöst Schauen wir uns unsere Lösung aber nochmal an
  22. Wenn wir sagen, dass GET-Request Lesebefehle also Queries sind Und das POST-Requests Schreibbefehle, also Commands sind Und wir das in unsere Benamung übernehmen, dann - Klick
  23. Bekommen wir CQRS Command Query Responsibilty Segregation Also Trennung zwischen Lese- und Schreibzugriffen Außerdem Trennung zwischen Applikations- und Anzeigelogik zu trennen man sihet hier auch, wie man CQRS auch in bestehende MVC Anwendungen integrieren kann Indem man die Lese und Schreibzugriffe trennt und dem Controller „falsche“ Aufgaben nimmt Wie nun die Applikationslogik und die Businesslogik implementiert werden beantwortet CQRS nicht Gängige MVC-Frameworks tun das auch nicht Aber wie es in der Praxis aussehen kann und warum man mit CQRS vieles geschenkt bekommt zeigt euch Holger im - Klick
  24. Artikel von Martin Fowler und Stefan Priebsch sehr ans Herz gelegt
  25. RequestHandler werden vom Framework dynamisch aufgerufen Query / Command schaffen konkretes Interface für die Request-Daten Services kapseln die Business-Logik und sprechen mit dem Model / Query-/Command Handler verarbeiten die Ergebnisse der Service-Aufrufe zu einer Antwort Services sind komplett austauschbar ohne das Request / Response Handling anfassen zu müssen!
  26. Artikel von Martin Fowler und Stefan Priebsch sehr ans Herz gelegt
  27. Wer schonmal anfangen will – IceHawk Framework
  28. Vielen Dank Slides auf unserem Blog phpind.de und auf slideshare Verlinkung auch auf der UG-Seite Beispiel-Code auf GitHub