From cd33d169bc5bf94e6706f168f2929a47411f961a Mon Sep 17 00:00:00 2001 From: Miguel Veloso Date: Mon, 15 Apr 2019 18:32:26 +0100 Subject: [PATCH 1/8] Remove non-working links There was no replacement links after contacting the blog author. Closes https://github.com/dotnet/docs/issues/11705 --- .../eshoponcontainers-cqrs-ddd-microservice.md | 9 --------- 1 file changed, 9 deletions(-) diff --git a/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/eshoponcontainers-cqrs-ddd-microservice.md b/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/eshoponcontainers-cqrs-ddd-microservice.md index 26cb9ef9bccfc..d8c9fca5f0ae6 100644 --- a/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/eshoponcontainers-cqrs-ddd-microservice.md +++ b/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/eshoponcontainers-cqrs-ddd-microservice.md @@ -40,21 +40,12 @@ There is only one application architecture: the architecture of the system or en - **Martin Fowler. CQRS** \ [https://martinfowler.com/bliki/CQRS.html](https://martinfowler.com/bliki/CQRS.html) -- **Greg Young. CQS vs. CQRS** \ - [http://codebetter.com/gregyoung/2009/08/13/command-query-separation/](http://codebetter.com/gregyoung/2009/08/13/command-query-separation/) - - **Greg Young. CQRS Documents** \ [https://cqrs.files.wordpress.com/2010/11/cqrs\_documents.pdf](https://cqrs.files.wordpress.com/2010/11/cqrs_documents.pdf) -- **Greg Young. CQRS, Task Based UIs and Event Sourcing** \ - [http://codebetter.com/gregyoung/2010/02/16/cqrs-task-based-uis-event-sourcing-agh/](http://codebetter.com/gregyoung/2010/02/16/cqrs-task-based-uis-event-sourcing-agh/) - - **Udi Dahan. Clarified CQRS** \ [http://udidahan.com/2009/12/09/clarified-cqrs/](http://udidahan.com/2009/12/09/clarified-cqrs/) -- **Event-Sourcing (ES)** \ - [http://codebetter.com/gregyoung/2010/02/20/why-use-event-sourcing/](http://codebetter.com/gregyoung/2010/02/20/why-use-event-sourcing/) - >[!div class="step-by-step"] >[Previous](apply-simplified-microservice-cqrs-ddd-patterns.md) >[Next](cqrs-microservice-reads.md) From dcf61edbfb65d0c088e9f1427ff38f23431d79a8 Mon Sep 17 00:00:00 2001 From: Miguel Veloso Date: Tue, 16 Apr 2019 08:22:54 +0100 Subject: [PATCH 2/8] Change to bare URLs --- .../eshoponcontainers-cqrs-ddd-microservice.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/eshoponcontainers-cqrs-ddd-microservice.md b/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/eshoponcontainers-cqrs-ddd-microservice.md index d8c9fca5f0ae6..e8a522f69c172 100644 --- a/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/eshoponcontainers-cqrs-ddd-microservice.md +++ b/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/eshoponcontainers-cqrs-ddd-microservice.md @@ -38,13 +38,13 @@ There is only one application architecture: the architecture of the system or en ### Additional resources - **Martin Fowler. CQRS** \ - [https://martinfowler.com/bliki/CQRS.html](https://martinfowler.com/bliki/CQRS.html) + - **Greg Young. CQRS Documents** \ - [https://cqrs.files.wordpress.com/2010/11/cqrs\_documents.pdf](https://cqrs.files.wordpress.com/2010/11/cqrs_documents.pdf) + - **Udi Dahan. Clarified CQRS** \ - [http://udidahan.com/2009/12/09/clarified-cqrs/](http://udidahan.com/2009/12/09/clarified-cqrs/) + >[!div class="step-by-step"] >[Previous](apply-simplified-microservice-cqrs-ddd-patterns.md) From 9dfdfbd456f2dc10222c803883498cd674d5c025 Mon Sep 17 00:00:00 2001 From: Miguel Veloso Date: Tue, 16 Apr 2019 08:45:11 +0100 Subject: [PATCH 3/8] Replace non working link --- .../apply-simplified-microservice-cqrs-ddd-patterns.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/apply-simplified-microservice-cqrs-ddd-patterns.md b/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/apply-simplified-microservice-cqrs-ddd-patterns.md index b984ec0c602f8..70e4e2eaa259c 100644 --- a/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/apply-simplified-microservice-cqrs-ddd-patterns.md +++ b/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/apply-simplified-microservice-cqrs-ddd-patterns.md @@ -15,7 +15,7 @@ CQRS is an architectural pattern that separates the models for reading and writi CQS is a simple concept—it is about methods within the same object being either queries or commands. Each method either returns state or mutates state, but not both. Even a single repository pattern object can comply with CQS. CQS can be considered a foundational principle for CQRS. -[Command and Query Responsibility Segregation (CQRS)](https://martinfowler.com/bliki/CQRS.html) was introduced by Greg Young and strongly promoted by Udi Dahan and others. It is based on the CQS principle, although it is more detailed. It can be considered a pattern based on commands and events plus optionally on asynchronous messages. In many cases, CQRS is related to more advanced scenarios, like having a different physical database for reads (queries) than for writes (updates). Moreover, a more evolved CQRS system might implement [Event-Sourcing (ES)](http://codebetter.com/gregyoung/2010/02/20/why-use-event-sourcing/) for your updates database, so you would only store events in the domain model instead of storing the current-state data. However, this is not the approach used in this guide; we are using the simplest CQRS approach, which consists of just separating the queries from the commands. +[Command and Query Responsibility Segregation (CQRS)](https://martinfowler.com/bliki/CQRS.html) was introduced by Greg Young and strongly promoted by Udi Dahan and others. It is based on the CQS principle, although it is more detailed. It can be considered a pattern based on commands and events plus optionally on asynchronous messages. In many cases, CQRS is related to more advanced scenarios, like having a different physical database for reads (queries) than for writes (updates). Moreover, a more evolved CQRS system might implement [Event-Sourcing (ES) (page 25)](https://cqrs.files.wordpress.com/2010/11/cqrs_documents.pdf#page=25) for your updates database, so you would only store events in the domain model instead of storing the current-state data. However, this is not the approach used in this guide; we are using the simplest CQRS approach, which consists of just separating the queries from the commands. The separation aspect of CQRS is achieved by grouping query operations in one layer and commands in another layer. Each layer has its own data model (note that we say model, not necessarily a different database) and is built using its own combination of patterns and technologies. More importantly, the two layers can be within the same tier or microservice, as in the example (ordering microservice) used for this guide. Or they could be implemented on different microservices or processes so they can be optimized and scaled out separately without affecting one another. @@ -31,4 +31,4 @@ The application layer can be the Web API itself. The important design aspect her >[!div class="step-by-step"] >[Previous](index.md) ->[Next](eshoponcontainers-cqrs-ddd-microservice.md) \ No newline at end of file +>[Next](eshoponcontainers-cqrs-ddd-microservice.md) From bdc655f9651543047c7085d6c7f842b0b8298240 Mon Sep 17 00:00:00 2001 From: Miguel Veloso Date: Tue, 16 Apr 2019 08:48:21 +0100 Subject: [PATCH 4/8] Replace non-working link --- .../domain-events-design-implementation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/domain-events-design-implementation.md b/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/domain-events-design-implementation.md index 62fa583907d70..08976494ac6b6 100644 --- a/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/domain-events-design-implementation.md +++ b/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/domain-events-design-implementation.md @@ -341,7 +341,7 @@ As stated, use domain events to explicitly implement side effects of changes wit ## Additional resources - **Greg Young. What is a Domain Event?** \ - [http://codebetter.com/gregyoung/2010/04/11/what-is-a-domain-event/](http://codebetter.com/gregyoung/2010/04/11/what-is-a-domain-event/) + - **Jan Stenberg. Domain Events and Eventual Consistency** \ [https://www.infoq.com/news/2015/09/domain-events-consistency](https://www.infoq.com/news/2015/09/domain-events-consistency) From b0c12b8eb7d09874fd16b0b50d2b4964efd0ccb8 Mon Sep 17 00:00:00 2001 From: Miguel Veloso Date: Tue, 16 Apr 2019 12:02:39 +0100 Subject: [PATCH 5/8] Add additional resource --- .../apply-simplified-microservice-cqrs-ddd-patterns.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/apply-simplified-microservice-cqrs-ddd-patterns.md b/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/apply-simplified-microservice-cqrs-ddd-patterns.md index 70e4e2eaa259c..f029a870c77be 100644 --- a/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/apply-simplified-microservice-cqrs-ddd-patterns.md +++ b/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/apply-simplified-microservice-cqrs-ddd-patterns.md @@ -29,6 +29,11 @@ An example of this kind of service is the ordering microservice from the eShopOn The application layer can be the Web API itself. The important design aspect here is that the microservice has split the queries and ViewModels (data models especially created for the client applications) from the commands, domain model, and transactions following the CQRS pattern. This approach keeps the queries independent from restrictions and constraints coming from DDD patterns that only make sense for transactions and updates, as explained in later sections. +## Additional resources + + - **Greg Young. Versioning in an Event Sourced System** (Free online e-book) \ + + >[!div class="step-by-step"] >[Previous](index.md) >[Next](eshoponcontainers-cqrs-ddd-microservice.md) From bb68760a7115427c50b5a9e609ca39e3efee3bc4 Mon Sep 17 00:00:00 2001 From: Miguel Veloso Date: Tue, 16 Apr 2019 12:03:28 +0100 Subject: [PATCH 6/8] Minor formatting typo --- .../apply-simplified-microservice-cqrs-ddd-patterns.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/apply-simplified-microservice-cqrs-ddd-patterns.md b/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/apply-simplified-microservice-cqrs-ddd-patterns.md index f029a870c77be..ce52cac9cf1d1 100644 --- a/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/apply-simplified-microservice-cqrs-ddd-patterns.md +++ b/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/apply-simplified-microservice-cqrs-ddd-patterns.md @@ -32,7 +32,7 @@ The application layer can be the Web API itself. The important design aspect her ## Additional resources - **Greg Young. Versioning in an Event Sourced System** (Free online e-book) \ - + >[!div class="step-by-step"] >[Previous](index.md) From fea77582db1fef42179762971d781eb7205082b5 Mon Sep 17 00:00:00 2001 From: Miguel Veloso Date: Mon, 22 Apr 2019 15:39:12 +0100 Subject: [PATCH 7/8] Apply review comments --- .../apply-simplified-microservice-cqrs-ddd-patterns.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/apply-simplified-microservice-cqrs-ddd-patterns.md b/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/apply-simplified-microservice-cqrs-ddd-patterns.md index ce52cac9cf1d1..9ebeb9d9a8478 100644 --- a/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/apply-simplified-microservice-cqrs-ddd-patterns.md +++ b/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/apply-simplified-microservice-cqrs-ddd-patterns.md @@ -15,7 +15,7 @@ CQRS is an architectural pattern that separates the models for reading and writi CQS is a simple concept—it is about methods within the same object being either queries or commands. Each method either returns state or mutates state, but not both. Even a single repository pattern object can comply with CQS. CQS can be considered a foundational principle for CQRS. -[Command and Query Responsibility Segregation (CQRS)](https://martinfowler.com/bliki/CQRS.html) was introduced by Greg Young and strongly promoted by Udi Dahan and others. It is based on the CQS principle, although it is more detailed. It can be considered a pattern based on commands and events plus optionally on asynchronous messages. In many cases, CQRS is related to more advanced scenarios, like having a different physical database for reads (queries) than for writes (updates). Moreover, a more evolved CQRS system might implement [Event-Sourcing (ES) (page 25)](https://cqrs.files.wordpress.com/2010/11/cqrs_documents.pdf#page=25) for your updates database, so you would only store events in the domain model instead of storing the current-state data. However, this is not the approach used in this guide; we are using the simplest CQRS approach, which consists of just separating the queries from the commands. +[Command and Query Responsibility Segregation (CQRS)](https://martinfowler.com/bliki/CQRS.html) was introduced by Greg Young and strongly promoted by Udi Dahan and others. It is based on the CQS principle, although it is more detailed. It can be considered a pattern based on commands and events plus optionally on asynchronous messages. In many cases, CQRS is related to more advanced scenarios, like having a different physical database for reads (queries) than for writes (updates). Moreover, a more evolved CQRS system might implement [Event-Sourcing (ES)](https://martinfowler.com/eaaDev/EventSourcing.html) for your updates database, so you would only store events in the domain model instead of storing the current-state data. However, this is not the approach used in this guide; we are using the simplest CQRS approach, which consists of just separating the queries from the commands. The separation aspect of CQRS is achieved by grouping query operations in one layer and commands in another layer. Each layer has its own data model (note that we say model, not necessarily a different database) and is built using its own combination of patterns and technologies. More importantly, the two layers can be within the same tier or microservice, as in the example (ordering microservice) used for this guide. Or they could be implemented on different microservices or processes so they can be optimized and scaled out separately without affecting one another. @@ -31,7 +31,7 @@ The application layer can be the Web API itself. The important design aspect her ## Additional resources - - **Greg Young. Versioning in an Event Sourced System** (Free online e-book) \ + - **Greg Young. Versioning in an Event Sourced System** (Free to read online e-book) \ >[!div class="step-by-step"] From eed48b485c259451795646c3fbf3a9d431dcb21e Mon Sep 17 00:00:00 2001 From: Miguel Veloso Date: Mon, 29 Apr 2019 17:26:45 +0100 Subject: [PATCH 8/8] Apply review comments --- .../apply-simplified-microservice-cqrs-ddd-patterns.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/apply-simplified-microservice-cqrs-ddd-patterns.md b/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/apply-simplified-microservice-cqrs-ddd-patterns.md index 9ebeb9d9a8478..42ef84b5dda6c 100644 --- a/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/apply-simplified-microservice-cqrs-ddd-patterns.md +++ b/docs/standard/microservices-architecture/microservice-ddd-cqrs-patterns/apply-simplified-microservice-cqrs-ddd-patterns.md @@ -32,7 +32,7 @@ The application layer can be the Web API itself. The important design aspect her ## Additional resources - **Greg Young. Versioning in an Event Sourced System** (Free to read online e-book) \ - + >[!div class="step-by-step"] >[Previous](index.md)