The document provides an introduction to the Command/Query Responsibility Segregation (CQRS) pattern. It outlines an agenda for the presentation that includes recapping domain-driven design principles, explaining CQRS, and providing a step-by-step approach towards implementing CQRS. The presentation argues that separating reading from writing allows for simpler and more scalable system designs compared to traditional architectures that try to support both with a single model.
Is your organization committed to the power of the Java platform but stuck in the Java language? Do you spend your time wishing you could use Scala at work, but don’t see how you can get it approved?
There are good reasons to push for it! Scala is a popular language with Java developers because of its expressiveness and lack of boilerplate code. It allows you to focus on the problem rather than the ceremony required by Java. Yet, businesses are often reluctant to move to Scala, citing concerns about availability of developers and risks of working in a new language.
Learn strategies for bringing Scala into your organization, including using it in non-production code, integrating Scala into a Java application, and easing your fellow programmers into functional programming. See how to use Scala for new development while maintaining your investment in existing Java code. Hear stories of how other organizations have done this and succeeded. You’ll leave knowing how you can move to Scala without risking your job or the success of your projects.
These are the slides of my talk on June 22nd 2015 at the GOTO Night in Cologne
https://secure.trifork.com/berlin-2015/freeevent/index.jsp?eventOID=7123
Domain-Driven Design changed the way we reason about large software systems. Modern practices, tools and technologies like continuous delivery, NoSQL, and cloud-based virtualization allow the creation of fine-grained systems to solve the specific problems at hand.
Having DDD in mind and technical expertise at our hands, with microservice architectures we can build complex systems that reflect our businesses' complex realities and are easy to change at the same time. This talk will show what DDD and microservice architectures have in common and how you can use both to create software systems that fit your domain.
Is your organization committed to the power of the Java platform but stuck in the Java language? Do you spend your time wishing you could use Scala at work, but don’t see how you can get it approved?
There are good reasons to push for it! Scala is a popular language with Java developers because of its expressiveness and lack of boilerplate code. It allows you to focus on the problem rather than the ceremony required by Java. Yet, businesses are often reluctant to move to Scala, citing concerns about availability of developers and risks of working in a new language.
Learn strategies for bringing Scala into your organization, including using it in non-production code, integrating Scala into a Java application, and easing your fellow programmers into functional programming. See how to use Scala for new development while maintaining your investment in existing Java code. Hear stories of how other organizations have done this and succeeded. You’ll leave knowing how you can move to Scala without risking your job or the success of your projects.
These are the slides of my talk on June 22nd 2015 at the GOTO Night in Cologne
https://secure.trifork.com/berlin-2015/freeevent/index.jsp?eventOID=7123
Domain-Driven Design changed the way we reason about large software systems. Modern practices, tools and technologies like continuous delivery, NoSQL, and cloud-based virtualization allow the creation of fine-grained systems to solve the specific problems at hand.
Having DDD in mind and technical expertise at our hands, with microservice architectures we can build complex systems that reflect our businesses' complex realities and are easy to change at the same time. This talk will show what DDD and microservice architectures have in common and how you can use both to create software systems that fit your domain.
Déjà 10 ans de Software Craft ! Comment vos pratiques ont-elles évolué durant cette décennie ? Au-delà de la dette technique dont Arnaud Lemaire avait parlé l’an passé, au-delà du Clean Code, de TDD et de BDD, 10 ans après le Craft doit se préoccuper désormais des environnements d’aujourd’hui, avec plus de distribué, des microservices, du Cloud et même (et ce n’est même pas un troll) des transformations digitales ! Mais alors, est-ce vraiment encore du Craft ? Venez juger par vous-mêmes avec Cyrille sous le soleil de Sunny Tech !
Let's go to the whiteboard: how and why software developers use drawingsMauro Cherubini
Software developers are rooted in the written form of their code, yet they often draw diagrams representing their code. Unfortunately, we still know little about how and why they create these diagrams, and so there is little research to inform the design of visual tools to support developers' work. This paper presents findings from semi-structured interviews that have been validated with a structured survey. Results show that most of the diagrams had a transient nature because of the high cost of changing whiteboard sketches to electronic renderings. Diagrams that documented design decisions were often externalized in these temporary drawings and then subsequently lost. Current visualization tools and the software development practices that we observed do not solve these issues, but these results suggest several directions for future research.
Agile Architecture (Scrum + DevOps) by Milan ChhedaAgile ME
This topic will cover about how-to build the culture of agility and collaboration using Scrum and DevOps. With the help of Atlassian tools including JIRA, Confluence, Bitbucket, Bamboo & JIRA Service Desk, one can start small to build the culture to embrace the change and incrementally improve and evolve. Scrum and DevOps unites Agile, Continuous Delivery, Automation, and much more, to help development and operations teams be more efficient, innovate faster, and deliver higher value to businesses and customers.
Domain driven design is help as part of software development for proper deliver of software applications.
It will help on strategic planning of software design and delivery.
Following on from the success of last year, this annual event for London's architect community will have architectural innovation as a theme this year, and particularly CQRS. At the DDD eXchange we will feature leading thinkers and architects who will share their experience and Eric Evans is the programme lead.
DNetZone is a premier information technology provider company, offering a wide array of software development solutions to businesses all over the world.
Intergen Welcome Keynote: Microsoft Dynamics - Bringing it all togetherIntergen
The Dynamics suite is now firmly embedded as part of the overall Microsoft technology stack.
The value of combining these applications to solve business problems is more than the sum of
the parts. In this keynote we’ll cover the role of each of these solutions and discuss the value
you can gain from a move to the cloud.
We build a Password Manager, to help consumers and businesses manage their digital identity in a safe and user-friendly way. The story of agile practices at Dashlane is a series of iterative steps. As we grew as a company, we adapted our organization to our needs. We tried to learn from our past mistakes, and we did a lot and matured along the way.
We are actually always looking for the right organization at the right moment, the one that provides us for the maximum efficiency and the maximum value for our customers and our business.
Application Integration Patterns (not only) for MicroservicesDennis Traub
When you have a microservices architectural style, much of the communication between components is done over the network. In order to achieve what microservices promise, this communication must happen in a loosely coupled manner. In this session, we discuss some fundamental application integration patterns mostly based on messaging, and we connect them to real-world use cases in a microservices scenario. We also highlight the benefits that asynchronous messaging can have over REST APIs for communication between microservices.
Serverless SecOps Automation on AWS at AWS UG Krakow, PolandDennis Traub
This is the slide deck of my presentation "Serverless SecOps Automation on AWS - How to automatically detect and handle security events in the cloud", that I presented at AWS UG Krakow, Poland, on Nov 26, 2020
Déjà 10 ans de Software Craft ! Comment vos pratiques ont-elles évolué durant cette décennie ? Au-delà de la dette technique dont Arnaud Lemaire avait parlé l’an passé, au-delà du Clean Code, de TDD et de BDD, 10 ans après le Craft doit se préoccuper désormais des environnements d’aujourd’hui, avec plus de distribué, des microservices, du Cloud et même (et ce n’est même pas un troll) des transformations digitales ! Mais alors, est-ce vraiment encore du Craft ? Venez juger par vous-mêmes avec Cyrille sous le soleil de Sunny Tech !
Let's go to the whiteboard: how and why software developers use drawingsMauro Cherubini
Software developers are rooted in the written form of their code, yet they often draw diagrams representing their code. Unfortunately, we still know little about how and why they create these diagrams, and so there is little research to inform the design of visual tools to support developers' work. This paper presents findings from semi-structured interviews that have been validated with a structured survey. Results show that most of the diagrams had a transient nature because of the high cost of changing whiteboard sketches to electronic renderings. Diagrams that documented design decisions were often externalized in these temporary drawings and then subsequently lost. Current visualization tools and the software development practices that we observed do not solve these issues, but these results suggest several directions for future research.
Agile Architecture (Scrum + DevOps) by Milan ChhedaAgile ME
This topic will cover about how-to build the culture of agility and collaboration using Scrum and DevOps. With the help of Atlassian tools including JIRA, Confluence, Bitbucket, Bamboo & JIRA Service Desk, one can start small to build the culture to embrace the change and incrementally improve and evolve. Scrum and DevOps unites Agile, Continuous Delivery, Automation, and much more, to help development and operations teams be more efficient, innovate faster, and deliver higher value to businesses and customers.
Domain driven design is help as part of software development for proper deliver of software applications.
It will help on strategic planning of software design and delivery.
Following on from the success of last year, this annual event for London's architect community will have architectural innovation as a theme this year, and particularly CQRS. At the DDD eXchange we will feature leading thinkers and architects who will share their experience and Eric Evans is the programme lead.
DNetZone is a premier information technology provider company, offering a wide array of software development solutions to businesses all over the world.
Intergen Welcome Keynote: Microsoft Dynamics - Bringing it all togetherIntergen
The Dynamics suite is now firmly embedded as part of the overall Microsoft technology stack.
The value of combining these applications to solve business problems is more than the sum of
the parts. In this keynote we’ll cover the role of each of these solutions and discuss the value
you can gain from a move to the cloud.
We build a Password Manager, to help consumers and businesses manage their digital identity in a safe and user-friendly way. The story of agile practices at Dashlane is a series of iterative steps. As we grew as a company, we adapted our organization to our needs. We tried to learn from our past mistakes, and we did a lot and matured along the way.
We are actually always looking for the right organization at the right moment, the one that provides us for the maximum efficiency and the maximum value for our customers and our business.
Application Integration Patterns (not only) for MicroservicesDennis Traub
When you have a microservices architectural style, much of the communication between components is done over the network. In order to achieve what microservices promise, this communication must happen in a loosely coupled manner. In this session, we discuss some fundamental application integration patterns mostly based on messaging, and we connect them to real-world use cases in a microservices scenario. We also highlight the benefits that asynchronous messaging can have over REST APIs for communication between microservices.
Serverless SecOps Automation on AWS at AWS UG Krakow, PolandDennis Traub
This is the slide deck of my presentation "Serverless SecOps Automation on AWS - How to automatically detect and handle security events in the cloud", that I presented at AWS UG Krakow, Poland, on Nov 26, 2020
Serverless Security Automation on AWS - Hamburg AWS User GroupDennis Traub
Presented at Hamburg AWS User Group, June 6th, 2019.
IT is inherently insecure and moving to the cloud could expose your workload to all new kinds of potential risks. However, AWS provides you with a large set of integrated tools to be just as secure as your on-premises solution.
In this talk, you will learn how to combine these built-in tools with serverless technologies to monitor your environment and automatically detect, contain, and remediate security risks on AWS.
Cloud ist keine Strategie - Keynote des AWS Cloud Day, SolingenDennis Traub
Der Schritt in die Cloud ist für sich alleine noch keine Strategie. Vielmehr müssen Unternehmen die Cloud als mächtiges Werkzeug begreifen, das bei wohlüberlegtem Einsatz dabei helfen kann, schnell und kostengünstig mit neuen Geschäftsideen zu experimentieren.
Mit klugen Ideen und einer kleinen Portion Mut wagen immer mehr deutsche Unternehmen über alle Branchen hinweg den gefürchteten Umstieg in die digitale Welt und sind auf dem besten Weg, sich profitable und zukunftsfähige Geschäftsfelder zu erschließen.
Mit dem richtigen Vorgehensmodell und dem Ansatz “Einfach mal machen” kann jedes Unternehmen erstaunliche Dinge vollbringen.
Cloud ist keine Strategie - AWS Tech Community Summit Cologne, 2017Dennis Traub
Der Schritt in die Cloud ist für sich alleine noch keine Strategie. Vielmehr müssen Unternehmen die Cloud als mächtiges Werkzeug begreifen, das bei wohlüberlegtem Einsatz dabei helfen kann, schnell und kostengünstig mit neuen Geschäftsideen zu experimentieren.
Mit klugen Ideen und einer kleinen Portion Mut wagen immer mehr deutsche Unternehmen über alle Branchen hinweg den gefürchteten Umstieg in die digitale Welt und sind auf dem besten Weg, sich profitable und zukunftsfähige Geschäftsfelder zu erschließen. Mit dem richtigen Vorgehensmodell und dem Ansatz “Einfach mal machen” kann jedes Unternehmen erstaunliche Dinge vollbringen.
Taming the Monolith - Microservices Meetup HamburgDennis Traub
Taming the Monolith - Are Microservices just an Implementation Detail?
The slides of my presentation at the Microservices Meetup Hamburg on July 13th, 2015, hosted by Adobe Systems Engineering GmbH.
Event details: http://www.meetup.com/de/Microservices-Meetup-Hamburg/events/220839035/
DDD / Microservices @ Trivento Spring Camp, Utrecht, 2015Dennis Traub
Domain-Driven Design changed the way we reason about large software systems. Modern practices, tools and technologies like continuous delivery, NoSQL, and cloud-based virtualization allow the creation of fine-grained systems to solve the specific problems at hand. Having DDD in mind and technical expertise at our hands, with Microservice architectures we can build complex systems that reflect our businesses' complex realities and are easy to change at the same time. This talk will show what DDD and Microservice architectures have in common and how you can use both to create software systems that fit your domain.
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Jeffrey Haguewood
Sidekick Solutions uses Bonterra Impact Management (fka Social Solutions Apricot) and automation solutions to integrate data for business workflows.
We believe integration and automation are essential to user experience and the promise of efficient work through technology. Automation is the critical ingredient to realizing that full vision. We develop integration products and services for Bonterra Case Management software to support the deployment of automations for a variety of use cases.
This video focuses on the notifications, alerts, and approval requests using Slack for Bonterra Impact Management. The solutions covered in this webinar can also be deployed for Microsoft Teams.
Interested in deploying notification automations for Bonterra Impact Management? Contact us at sales@sidekicksolutionsllc.com to discuss next steps.
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
Accelerate your Kubernetes clusters with Varnish CachingThijs Feryn
A presentation about the usage and availability of Varnish on Kubernetes. This talk explores the capabilities of Varnish caching and shows how to use the Varnish Helm chart to deploy it to Kubernetes.
This presentation was delivered at K8SUG Singapore. See https://feryn.eu/presentations/accelerate-your-kubernetes-clusters-with-varnish-caching-k8sug-singapore-28-2024 for more details.
GraphRAG is All You need? LLM & Knowledge GraphGuy Korland
Guy Korland, CEO and Co-founder of FalkorDB, will review two articles on the integration of language models with knowledge graphs.
1. Unifying Large Language Models and Knowledge Graphs: A Roadmap.
https://arxiv.org/abs/2306.08302
2. Microsoft Research's GraphRAG paper and a review paper on various uses of knowledge graphs:
https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
Essentials of Automations: Optimizing FME Workflows with ParametersSafe Software
Are you looking to streamline your workflows and boost your projects’ efficiency? Do you find yourself searching for ways to add flexibility and control over your FME workflows? If so, you’re in the right place.
Join us for an insightful dive into the world of FME parameters, a critical element in optimizing workflow efficiency. This webinar marks the beginning of our three-part “Essentials of Automation” series. This first webinar is designed to equip you with the knowledge and skills to utilize parameters effectively: enhancing the flexibility, maintainability, and user control of your FME projects.
Here’s what you’ll gain:
- Essentials of FME Parameters: Understand the pivotal role of parameters, including Reader/Writer, Transformer, User, and FME Flow categories. Discover how they are the key to unlocking automation and optimization within your workflows.
- Practical Applications in FME Form: Delve into key user parameter types including choice, connections, and file URLs. Allow users to control how a workflow runs, making your workflows more reusable. Learn to import values and deliver the best user experience for your workflows while enhancing accuracy.
- Optimization Strategies in FME Flow: Explore the creation and strategic deployment of parameters in FME Flow, including the use of deployment and geometry parameters, to maximize workflow efficiency.
- Pro Tips for Success: Gain insights on parameterizing connections and leveraging new features like Conditional Visibility for clarity and simplicity.
We’ll wrap up with a glimpse into future webinars, followed by a Q&A session to address your specific questions surrounding this topic.
Don’t miss this opportunity to elevate your FME expertise and drive your projects to new heights of efficiency.
Connector Corner: Automate dynamic content and events by pushing a buttonDianaGray10
Here is something new! In our next Connector Corner webinar, we will demonstrate how you can use a single workflow to:
Create a campaign using Mailchimp with merge tags/fields
Send an interactive Slack channel message (using buttons)
Have the message received by managers and peers along with a test email for review
But there’s more:
In a second workflow supporting the same use case, you’ll see:
Your campaign sent to target colleagues for approval
If the “Approve” button is clicked, a Jira/Zendesk ticket is created for the marketing design team
But—if the “Reject” button is pushed, colleagues will be alerted via Slack message
Join us to learn more about this new, human-in-the-loop capability, brought to you by Integration Service connectors.
And...
Speakers:
Akshay Agnihotri, Product Manager
Charlie Greenberg, Host
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf91mobiles
91mobiles recently conducted a Smart TV Buyer Insights Survey in which we asked over 3,000 respondents about the TV they own, aspects they look at on a new TV, and their TV buying preferences.
JMeter webinar - integration with InfluxDB and GrafanaRTTS
Watch this recorded webinar about real-time monitoring of application performance. See how to integrate Apache JMeter, the open-source leader in performance testing, with InfluxDB, the open-source time-series database, and Grafana, the open-source analytics and visualization application.
In this webinar, we will review the benefits of leveraging InfluxDB and Grafana when executing load tests and demonstrate how these tools are used to visualize performance metrics.
Length: 30 minutes
Session Overview
-------------------------------------------
During this webinar, we will cover the following topics while demonstrating the integrations of JMeter, InfluxDB and Grafana:
- What out-of-the-box solutions are available for real-time monitoring JMeter tests?
- What are the benefits of integrating InfluxDB and Grafana into the load testing stack?
- Which features are provided by Grafana?
- Demonstration of InfluxDB and Grafana using a practice web application
To view the webinar recording, go to:
https://www.rttsweb.com/jmeter-integration-webinar
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...James Anderson
Effective Application Security in Software Delivery lifecycle using Deployment Firewall and DBOM
The modern software delivery process (or the CI/CD process) includes many tools, distributed teams, open-source code, and cloud platforms. Constant focus on speed to release software to market, along with the traditional slow and manual security checks has caused gaps in continuous security as an important piece in the software supply chain. Today organizations feel more susceptible to external and internal cyber threats due to the vast attack surface in their applications supply chain and the lack of end-to-end governance and risk management.
The software team must secure its software delivery process to avoid vulnerability and security breaches. This needs to be achieved with existing tool chains and without extensive rework of the delivery processes. This talk will present strategies and techniques for providing visibility into the true risk of the existing vulnerabilities, preventing the introduction of security issues in the software, resolving vulnerabilities in production environments quickly, and capturing the deployment bill of materials (DBOM).
Speakers:
Bob Boule
Robert Boule is a technology enthusiast with PASSION for technology and making things work along with a knack for helping others understand how things work. He comes with around 20 years of solution engineering experience in application security, software continuous delivery, and SaaS platforms. He is known for his dynamic presentations in CI/CD and application security integrated in software delivery lifecycle.
Gopinath Rebala
Gopinath Rebala is the CTO of OpsMx, where he has overall responsibility for the machine learning and data processing architectures for Secure Software Delivery. Gopi also has a strong connection with our customers, leading design and architecture for strategic implementations. Gopi is a frequent speaker and well-known leader in continuous delivery and integrating security into software delivery.
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Tobias Schneck
As AI technology is pushing into IT I was wondering myself, as an “infrastructure container kubernetes guy”, how get this fancy AI technology get managed from an infrastructure operational view? Is it possible to apply our lovely cloud native principals as well? What benefit’s both technologies could bring to each other?
Let me take this questions and provide you a short journey through existing deployment models and use cases for AI software. On practical examples, we discuss what cloud/on-premise strategy we may need for applying it to our own infrastructure to get it to work from an enterprise perspective. I want to give an overview about infrastructure requirements and technologies, what could be beneficial or limiting your AI use cases in an enterprise environment. An interactive Demo will give you some insides, what approaches I got already working for real.
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Ramesh Iyer
In today's fast-changing business world, Companies that adapt and embrace new ideas often need help to keep up with the competition. However, fostering a culture of innovation takes much work. It takes vision, leadership and willingness to take risks in the right proportion. Sachin Dev Duggal, co-founder of Builder.ai, has perfected the art of this balance, creating a company culture where creativity and growth are nurtured at each stage.
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...
An Introduction to CQRS
1. An Introduction to
Command/Query Responsibility
Segregation
presented by Dennis Traub
.NET Stammtisch Konstanz/Kreuzlingen - 20. März 2013
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
2. Who‘s that guy?
Dennis Traub
Founder, Owner, CEO, Single Employee of
D. Traub Software Development Consultancy
Consultant, developer, trainer, speaker
39 years old
Married, father of one
20+ years in software development
Hire me at mail@dennistraub.de
@dtraub
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
3. AGENDA
DDD Recap CQRS Break Step by Step
the strategic patterns probably simpler than you think! towards CQRS
1 2 3 4 5 6
„Best Practice“ Domain Events End
what we call an Architecture are first class citizens Questions & Answers
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
4. AGENDA
DDD Recap CQRS Step by Step
the strategic patterns probably simpler than you think! towards CQRS
1 2 3 4 5 6
„Best Practice“ Domain Events End
what we call an Architecture are first class citizens Questions & Answers
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
5. The „Blue Book“ by Eric Evans
Image Placeholder
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
6. Domain-Driven Design
Domain
Service
Value Object
Aggregate
Specification The well-
known
Reposit ory Patterns Entity
Factory And so on . .
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
7. Domain-Driven Design
Ubiquit ous Language
Core Domain
Domain Expert
Bounded Context The
important
Domain Model Patterns (Generic) Subdomains
Context Map And so on . .
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
8. don‘t build one big model
that works for everyone
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
9. the tactical Building Blocks
we don‘t use DDD
when there is no value in
formalizing the problem
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
10. we only use DDD in parts
where we get a competitive
advantage
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
11. we focus our effort and resources on
the most important subdomain
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
12. a.k.a. The Core Domain
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
13. AGENDA
DDD Recap CQRS Step by Step
the strategic patterns probably simpler than you think! towards CQRS
1 2 3 4 5 6
„Best Practice“ Domain Events End
what we call an Architecture are first class citizens Questions & Answers
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
14. Presentation Layer
Application Services
Domain / Business Model / BLL
DAL / O/R-Mapper
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
15. Pros of the „Best Practice Architecture“
1 Easy to build
2 Accepted by management
3 Well-know throughall all seniority levels
4 We know ist limitiations
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
16. Cons of the „Best Practice Architecture“
1 Limited scalability
2 Loss of intent
3 Lazy loading, locking, race conditions, …
4 Few classes do way too much stuff
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
17. And:
If the model is basically
CRUD
where does Business Logic live?
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
18. Domain Model Responsibilities
1 Business Logic 6 Aggregation
2 Validation 7 Presentation
3 Structure 8 Persistence
4 Projection 9 Processes
5 Associations 10 Lazy / Eager Loading
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
19. the S in SOLID
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
20. SINGLE RESPONSIBILITY PRINCIPLE
Just because you can doesn‘t mean you should
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
21. why do we try to build
One Model to Rule Them All?
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
22. reading and writing are
completely different from eachother
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
23. Sometimes it‘s cheaper to do two things
than dealing with the trade-offs
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
24. AGENDA
DDD Recap CQRS Step by Step
the strategic patterns probably simpler than you think! towards CQRS
1 2 3 4 5 6
„Best Practice“ Domain Events End
what we call an Architecture are first class citizens Questions & Answers
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
26. Command Query Separation (CQS)
„Every method should either be
a command that performs an action or
a query that returns data to the caller“
-- Dr. Bertrand Meyer
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
27. Command Query Separation (CQS)
in other words:
Asking a question should
not change the answer
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
28. Command/Query
Responsability Segregation
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
29. CQS on an Architectural Level
Queries Commands
Project Details Project List Project
Data Store
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
30. Queries and Projection (Read)
Show something
Thin Read Layer
Data Store
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
31. Thin Read Layer
Concerns:
1 Filtering, Scope
2 Data Presentation
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
32. Thin Read Layer
Attributes:
1 Data-Oriented
2 Indexable
3 Can be denormalized and distributed for fast access
4 Only Structure
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
33. Behavior and Modification (Write)
Do something
Command Handler
Domain Model
O/R-Mapper
Data Store
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
34. Domain Model
Concerns:
1 Business Logic
2 Validation
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
35. Domain Model
Attributes:
1 Normalized
2 Transactional
3 Object-Oriented
4 Persistence Ignorant
5 Only Behavior
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
36. Commands
Refactor Application Service Calls to Objects
1 Serializable
2 Can be enveloped
3 Can be intercepted
4 Can be enriched
5 Communicate intent
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
37. Command Handlers
Refactored Application Service Methods:
1 Unify interface to all application services
2 Can be wrapped (e.g. Transaction, Authorization, Logging)
3 Can be enveloped (e.g. REST)
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
38. Command Handlers
Rule of thumb:
One Command Handler per use Case
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
39. This is CQRS
Client
Commands Queries
Command Handlers
Domain Model
O/R Mapper Thin Read Layer
Data Store
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
40. BREAK
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
41. AGENDA
DDD Recap CQRS Step by Step
the strategic patterns probably simpler than you think! towards CQRS
1 2 3 4 5 6
„Best Practice“ Domain Events End
what we call an Architecture are first class citizens Questions & Answers
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
43. Domain Event
captures the memory of
something interesting affecting the domain
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
44. Domain Event
the essence is to capture events that
trigger a change to the state
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
45. Domain Event
event objects are processed to
cause the respective change
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
46. Domain Event
and stored to provide an audit log
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
55. Added Added Added Removed
to to to from
Cart Cart Cart Cart
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
56. what if we
capture every single event?
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
57. … and reproduce state from
this stream of events?
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
58. An Event Stream …
Added Added Added Removed
to to to from
Cart Cart Cart Cart
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
59. An Event Stream …
Added Added Added Removed
to to to from
Cart Cart Cart Cart
Shopping
Cart
Can be projected into:
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
60. An Event Stream …
Added Added Added Removed
to to to from
Cart Cart Cart Cart
Sales History
Shopping
Cart
… or into this:
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
61. An Event Stream …
Added Added Added Removed
to to to from
Cart Cart Cart Cart
Sales History
Audit Trail
Shopping
Cart
… or into this:
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
62. An Event Stream …
Added Added Added Removed
to to to from
Cart Cart Cart Cart
Sales History
Audit Trail
Shopping
Campaign Effectiveness
Cart
… or into this:
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
63. AGENDA
DDD Recap CQRS Step by Step
the strategic patterns probably simpler than you think! towards CQRS
1 2 3 4 5 6
„Best Practice“ Domain Events End
what we call an Architecture are first class citizens Questions & Answers
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
64. Client
Commands Queries
Command Handlers
Domain Model
O/R Mapper Thin Read Layer
Data Store
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
65. Client
Commands Queries
Command Handlers
Domain Model
O/R Mapper Thin Read Layer
SQL
Data Store Views
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
66. Client
Commands Queries
Command Handlers
Domain Model
O/R Mapper Thin Read Layer
INNER JOIN …
SQL LEFT OUTER JOIN …
Data Store Views UNION …
GROUP BY …
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
67. Client
Commands Queries
Command Handlers
Domain Model
O/R Mapper Thin Read Layer
SELECT * FROM …
Table
Data Store per
Query
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
68. Client
Commands Queries
Command Handlers
Domain Model
O/R Mapper Thin Read Layer
Table
Data Store per
Query
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
69. Client
Commands Queries
Command Handlers
Domain Model
O/R Mapper Thin Read Layer
Event
Table
Data Store per
Query
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
70. Client
Commands Queries
Command Handlers
Domain Model
O/R Mapper Thin Read Layer
Event
Event
Table
Data Store per
Query
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
71. Client
Commands Queries
Command Handlers
Domain Model
O/R Mapper Thin Read Layer
Event
Event
Event
Table
Data Store per
Query
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
75. Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
76. Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
77. if ISBN exists in ShoppingCartDetails
Increase Amount
else
Add New Row
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
78. if Shopping Cart ID exists in ShoppingCartSummary
Increase NumberOfItems
Add OfferedPrice to TotalAmount
else
Add New Row
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
79. Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
80. Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
81. if Amount > 1 ShoppingCartDetails
Decrease Amount
else
Delete Row
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
82. Subtract OfferedPrice to TotalAmount
Decrease NumberOfItems
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
84. Testing the Write Model
Command Handlers
Domain Model
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
85. Testing the Write Model
Command Handlers
Given that certain Events happened
Domain Model
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
86. Testing the Write Model
When a specific Command is sent
Command Handlers
Given that certain Events happened
Domain Model
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
87. Testing the Write Model
When a specific Command is sent
Command Handlers
Given that certain Events happened
Domain Model
Event
Event
Then certain Events (and only those!) should be emitted
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
88. Testing the Read Model
Thin Read Layer
Table
per
Query
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
89. Testing the Read Model
Thin Read Layer
Given that certain Events happened
Table
per
Query
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
90. Testing the Read Model
Thin Read Layer
Given that certain Events happened
Table
per
When a specific Event happens Query
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
91. Testing the Read Model
Then each query should return the expected results
Thin Read Layer
Given that certain Events happened
Table
per
When a specific Event happens Query
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
99. mature business models
move away from Update/Delete
and become purely transactional
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
100. Human resources
Medicine
Bookkeeping
Banking
Finances
Government
…
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
101. AGENDA
DDD Recap CQRS Step by Step
the strategic patterns probably simpler than you think! towards CQRS
1 2 3 4 5 6
„Best Practice“ Domain Events End
what we call an Architecture are first class citizens Questions & Answers
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de
102. ?
QUESTIONS
Dennis Traub – Software Development Consultancy @dtraub – mail@dennistraub.de