Domain-driven design seems “straight-forward” when looking at green field development. Implementing that in an existing enterprise system, however, is daunting. In this workshop we will demonstrate the steps necessary in refactoring a non-DDD SOA-based system using DDD approaches, especially Command-Query Responsibility Segregation (CQRS) and Event Sourcing patterns.
The use of a service-oriented architecture is not new. There are thousands of existing enterprise systems that are built using SOA. This would typically look like a group of “client applications” that talk to a set of “back-end services” that were designed using a one-size-fits-all approach, where the representation of a persisted object is a union of all the business needs. The growth in domain-driven design shows how that may not be the best approach.
This session will be a dive into the process of modernizing a SOA-based enterprise system to support a DDD approach. We will talk about what this looks like at a high level and then demonstrate how this is supported by using Command-Query Responsibility Segregation (CQRS) and Event Sourcing.
Simply put, CQRS is an approach where different models are used when reading information than is used when updating that information. This approach becomes especially important as designs start being domain-driven, because each participant in the enterprise may have a different representation of that information. These different representations would be best managed with separate models. As part of this session, we will demonstrate (sometimes in code):
- Why we would take this approach (theory)
- What a non-CQRS approach looks like (current state)
- What a CQRS approach looks like (new state)
- How you manage data conversion (refactor)
- How to tell when you have gone wrong (troubleshoot)
Event sourcing is an approach where all of the changes to application state are stored as a list, or sequence, of events. As part of this session we will walk through (sometimes in code):
- How event sourcing fits into DDD (theory)
- How this need is managed now (current state)
- What the implementation looks like (new state)
- How you manage the conversion (refactor)
- How you can evaluate the effectiveness (quality & effectiveness)
Lastly, we will walk through how these changes fit into the overall modernization strategy.
William is into education and software development, both at the same time whenever possible. He has more than 25 years of full-time software development experience and over 25 years of part-time experience in education. William now specializes in the education of technology, using his personal experience as a software developer, as a team lead, as a development manager, as an IT director, and as a CTO\Partner to help guide technology-oriented education in the real world.
Currently, William is using his passion for education and technology to support .NET developers who are looking to modernize their systems and move to the world’s largest cloud company.
Steve Roberts is a Developer Advocate for .NET and PowerShell tools and technologies on Amazon Web Services. Now based in Seattle, Washington, Steve's career as a software developer spans thirty years with a focus on creating developer tools and IDE integrations to help developers be more productive in their chosen languages and platforms.
Prior to becoming a Developer Advocate, Steve spent almost eight years as a Senior Development Engineer at Amazon Web Services, working on the AWS SDKs and tools for .NET and PowerShell developers. He was the development lead for the AWS Tools for PowerShell and the AWS Tools for Microsoft Visual Studio Team Services, and also worked on the AWS Toolkits for Visual Studio and Visual Studio Code, together with the AWS SDK for .NET.