Search icon CANCEL
Subscription
0
Cart icon
Your Cart (0 item)
Close icon
You have no products in your basket yet
Save more on your purchases! discount-offer-chevron-icon
Savings automatically calculated. No voucher code required.
Arrow left icon
Explore Products
Best Sellers
New Releases
Books
Videos
Audiobooks
Learning Hub
Newsletter Hub
Free Learning
Arrow right icon
timer SALE ENDS IN
0 Days
:
00 Hours
:
00 Minutes
:
00 Seconds
Arrow up icon
GO TO TOP
Domain-Driven Refactoring

You're reading from   Domain-Driven Refactoring A hands-on DDD guide to transforming monoliths into modular systems and microservices

Arrow left icon
Product type Paperback
Published in May 2025
Publisher Packt
ISBN-13 9781835889107
Length 324 pages
Edition 1st Edition
Arrow right icon
Authors (2):
Arrow left icon
Alessandro Colla Alessandro Colla
Author Profile Icon Alessandro Colla
Alessandro Colla
Alberto Acerbis Alberto Acerbis
Author Profile Icon Alberto Acerbis
Alberto Acerbis
Arrow right icon
View More author details
Toc

Table of Contents (18) Chapters Close

Preface 1. Part 1: Why Use Domain-Driven Design to Tackle Complexity?
2. Evolution of Domain-Driven Design FREE CHAPTER 3. Understanding Complexity: Problem and Solution Space 4. Strategic Patterns 5. Tactical Patterns 6. Part 2: Refactoring Legacy Systems
7. Introducing Refactoring Principles 8. Transitioning from Chaos 9. Integrating Events with CQRS 10. Refactoring the Database 11. DDD Patterns for Continuous Integration and Continuous Refactoring 12. Part 3: Moving from Monolith to Microservices
13. When and Why You Should Transition to a Microservices Architecture 14. Dealing with Events and Their Evolution 15. Orchestrating Complexity: Advanced Approaches to Business Processes 16. Other Books You May Enjoy
17. Index

What this book covers

Chapter 1, Evolution of Domain-Driven Design, introduces the origins of DDD, tracing its development from early software engineering practices to its current role in addressing complexity. This chapter explores the fundamental challenges that DDD aims to solve and provides an overview of its key principles, including ubiquitous language and bounded contexts.

Chapter 2, Understanding Complexity: Problem and Solution Space, dives into the nature of complexity in software systems and teaches you how to distinguish between essential and accidental complexity. This chapter introduces tools such as the Cynefin framework and EventStorming, equipping you to navigate problem and solution spaces effectively.

Chapter 3, Strategic Patterns, covers the strategic aspects of DDD, focusing on dividing domains into bounded contexts and defining clear relationships between them. This chapter teaches you how to apply techniques such as context mapping and how to create a ubiquitous language that fosters collaboration and reduces ambiguity.

Chapter 4, Tactical Patterns, provides an overview of the tactical building blocks of DDD, such as entities, value objects, aggregates, repositories, and domain services, with practical examples of implementing these patterns in code while maintaining alignment with business rules.

Chapter 5, Introducing Refactoring Principles, teaches you how to identify and address technical debt in legacy systems using DDD principles. This chapter introduces key refactoring strategies, emphasizing the importance of modularity and incremental change to improve the maintainability and scalability supported by various kinds of tests.

Chapter 6, Transitioning from Chaos, focuses on transforming monolithic systems into modular architectures. This chapter explores practical steps for decoupling tightly coupled services, identifying bounded contexts, and implementing clear interfaces to simplify interactions.

Chapter 7, Integrating Events with CQRS, shows you how to implement Command Query Responsibility Segregation with EventSourcing (CQRS+ES). This chapter explains how to use events to decouple systems, ensure scalability, and maintain consistency while managing eventual consistency challenges.

Chapter 8, Refactoring the Database, provides strategies for aligning database schemas with bounded contexts and refactoring shared tables, as well as introducing patterns such as Expand/Contract. This chapter also covers techniques for handling data consistency in distributed systems.

Chapter 9, DDD Patterns for Continuous Integration and Continuous Refactoring, explores how to integrate DDD with continuous integration and delivery practices. This chapter focuses on automation, iterative design, and maintaining alignment between domain models and technical implementation.

Chapter 10, When and Why You Should Transition to a Microservices Architecture, provides guidance on transitioning from a modular monolith to a microservices architecture. This chapter highlights the trade-offs and complexities of distributed systems and explains how DDD principles can help with this evolution.

Chapter 11, Dealing with Events and Their Evolution, explains how to manage event versioning in event-sourced systems to ensure compatibility and adaptability over time. This chapter introduces strategies such as upcasting, schema evolution, and content negotiation.

Chapter 12, Orchestrating Complexity: Advanced Approaches to Business Processes, explores advanced DDD techniques for managing distributed systems and business processes. Topics covered in this chapter include sagas, choreography versus orchestration, and ensuring system consistency in the face of failures.

lock icon The rest of the chapter is locked
Register for a free Packt account to unlock a world of extra content!
A free Packt account unlocks extra newsletters, articles, discounted offers, and much more. Start advancing your knowledge today.
Unlock this book and the full library FREE for 7 days
Get unlimited access to 7000+ expert-authored eBooks and videos courses covering every tech area you can think of
Renews at $19.99/month. Cancel anytime