
Domain-driven Design with Java: Building scalable and maintainable Java applications with DDD principles
Otavio Santana
Premium
Title Page
1/30/2025
Copyright Page
1/30/2025
Dedication Page
1/30/2025
About the Author
1/30/2025
About the Reviewer
1/30/2025
Acknowledgement
1/30/2025
Preface
1/30/2025
Table of Contents
1/30/2025
1. Understanding Domain-driven Design
1/30/2025
Introduction
1/30/2025
Structure
1/30/2025
Objectives
1/30/2025
Importance of domain-driven design
1/30/2025
Connecting business goals with technical implementation
1/30/2025
Core concepts and methodologies
1/30/2025
Strategic aspect of DDD
1/30/2025
Tactical aspect of DDD
1/30/2025
Conclusion
1/30/2025
Points to remember
1/30/2025
Multiple choice questions
1/30/2025
Answers
1/30/2025
References
1/30/2025
2. Strategic DDD Concepts
1/30/2025
Domains and subdomains
1/30/2025
Example scenario with EcoTrack Logistics
1/30/2025
Understanding bounded contexts
1/30/2025
Context mapping techniques
1/30/2025
Aligning business strategy with software design
1/30/2025
3. Tactical DDD Implementation
1/30/2025
Technical requirements
1/30/2025
Entities and value objects
1/30/2025
Entities pitfalls
1/30/2025
Builders and domain-specific language
1/30/2025
Value object
1/30/2025
Aggregates and aggregate roots
1/30/2025
Services and their roles
1/30/2025
Implementing repositories
1/30/2025
4. Testing and Validating DDD Applications
1/30/2025
Introduction to testing in DDD
1/30/2025
Unit testing DDD components
1/30/2025
Defining the domain components
1/30/2025
Using tests to validate expected behavior
1/30/2025
Enhancing your tests
1/30/2025
Using ArchUnit for architectural validation
1/30/2025
5. DDD in Microservices, Monoliths, and Distributed Systems
1/30/2025
DDD in monolithic architecture
1/30/2025
Creating the domain layer and organizing packages
1/30/2025
Creating the application layer
1/30/2025
Creating the controller layer
1/30/2025
Creating the infrastructure layer
1/30/2025
DDD in microservices architecture
1/30/2025
Need for microservices
1/30/2025
Applying DDD in distributed systems
1/30/2025
Refactoring legacy code to align with DDD principles
1/30/2025
6. Integrating DDD with Clean Architecture
1/30/2025
Overview of Clean Architecture
1/30/2025
Combining DDD with Clean Architecture
1/30/2025
Creating well-defined boundaries with Clean Architecture and DDD
1/30/2025
Creating a bridge between the core application and external systems
1/30/2025
Structuring code for maintainability
1/30/2025
Using and combining each approach
1/30/2025
7. DDD and Data Modeling
1/30/2025
Principles of DDD in data modeling
1/30/2025
Modeling data in SQL databases
1/30/2025
Jakarta Persistence in action
1/30/2025
Modeling data in NoSQL databases
1/30/2025
8. Enterprise Java with Jakarta EE
1/30/2025
Applying DDD with Jakarta EE
1/30/2025
Leveraging Jakarta Data for better encapsulation
1/30/2025
Integrating DDD into enterprise Java applications
1/30/2025
9. Enterprise Java with Spring
1/30/2025
Overview of Spring Framework with DDD
1/30/2025
Applying DDD with Spring Boot
1/30/2025
Creating and setting up a new Spring Boot project
1/30/2025
Defining the core domain entities
1/30/2025
Shaping the repository and services
1/30/2025
Exposing the service through REST endpoints
1/30/2025
Polishing error handling
1/30/2025
Ensuring code behavior with unit tests
1/30/2025
10. Eclipse MicroProfile and Domain-driven Design
1/30/2025
Understanding Eclipse MicroProfile and its purpose
1/30/2025
Clarifying Jakarta EE and MicroProfile similarities
1/30/2025
Eclipse MicroProfile architecture and specifications
1/30/2025
Integrating Eclipse MicroProfile with DDD
1/30/2025
Practical microservices example
1/30/2025
11. Quarkus and Domain-driven Design
1/30/2025
Quarkus, Jakarta EE, and MicroProfile integration
1/30/2025
Quarkus in action
1/30/2025
Creating and setting up a new project
1/30/2025
Configuring the database integration
1/30/2025
Panache entity and resource code generation
1/30/2025
Validating the application's behavior
1/30/2025
Using Active Record with Panache
1/30/2025
Using the Repository pattern with Panache
1/30/2025
Using Panache from a DDD perspective
1/30/2025
12. Code Design and Best Practices for DDD
1/30/2025
Anemic model vs. rich model
1/30/2025
Fluent API vs. Builder pattern in DDD
1/30/2025
Exception handling and logging in DDD
1/30/2025
Defining the exceptions hierarchy
1/30/2025
Creating trackable exception messages
1/30/2025
Handling exceptions and logs securely
1/30/2025
Long-term code quality and sustainability
1/30/2025
13. Final Considerations
1/30/2025
Introduction to domain storytelling
1/30/2025
Purpose and benefits of domain storytelling
1/30/2025
Differences between domain storytelling and agile brainstorming
1/30/2025
Exploring domain storytelling
1/30/2025
Further reading and continued exploration
1/30/2025
Index
1/30/2025