Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[DDD Europe 2026] So you want to be a DDD pract...

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

[DDD Europe 2026] So you want to be a DDD practitioner

What if it's the first time someone you know hears about DDD? Or maybe they heard it before but never got to grasp it? Where to begin? What are the key concepts? What should they read, or watch, or do to become a DDD practitioner? How could you guide them?

More Decks by Talysson de Oliveira Cassiano

Other Decks in Programming

Transcript

  1. - DDD only adds unnecessary complexity - DDD is a

    type of software architecture - DDD is a way to organize files and folders - DDD applications have too many files - You have to use a lot of design patterns - DDD makes the code harder to understand - "I never needed DDD for my software to work!" - …
  2. "All you need to know about DDD" or "DDD lite"

    tutorials that skip all the important parts
  3. "The heart of software is its ability to solve domain

    related problems for the user" Domain-Driven Design - Eric Evans
  4. Domain - Finance - Health - Education - Shopping -

    Manufacturing - Mining - Cargo - … Problem "A system of abstractions that describes selected aspects of a domain and can be used to solve problems related to that domain" Model
  5. DDD is a development approach where: - Focus on the

    core domain - Explore models in creative collaboration - Speak a ubiquitous language
  6. Car

  7. Context mapping - Discover the relationships between the contexts -

    How they share/hide information and influence each other - They place constraints on the nature of the models and pace of change - Contexts that depend on each other mutually (partnership) - Contexts that need to support multiple dependent contexts (open host service) - Contexts that depend unilaterally of some context (conformist) - Contexts that don't even need to know about each other (separate ways) - … - Sometimes you have no control over that relationship! - e.g.: a 3rd party payment processor system
  8. Model A system of abstractions that describes selected aspects of

    a domain and can be used to solve problems related to that domain
  9. id: 42 status: pending shippingAddress: ABC St. estimatedDelivery: 10/10/2026 id:

    42 status: pending shippingAddress: XYZ Hwy. estimatedDelivery: 10/10/2026 Order #42 t
  10. id: 42 status: pending shippingAddress: ABC St. estimatedDelivery: 10/10/2026 id:

    42 status: shipped shippingAddress: Av. XYZ estimatedDelivery: 11/11/2026 Order #42 t id: 42 status: pending shippingAddress: XYZ Hwy. estimatedDelivery: 10/10/2026
  11. id: 42 status: pending shippingAddress: ABC St. estimatedDelivery: 10/10/2026 id:

    42 status: shipped shippingAddress: Av. XYZ estimatedDelivery: 11/11/2026 Order #42 t id: 42 status: pending shippingAddress: XYZ Hwy. estimatedDelivery: 10/10/2026 Identity + life cycle = Entity In your model
  12. red: 255 green: 0 blue: 0 Red red: 255 green:

    0 blue: 255 Pink red: 110 green: 200 blue: 80 Green
  13. red: 255 green: 0 blue: 0 Red red: 255 green:

    0 blue: 255 Pink red: 110 green: 200 blue: 80 Green No conceptual identity + significance comes from describing things = Value object In your model
  14. id status shippingAddress estimatedDelivery Order colour carId tires Customisations airConditioner

    mediaPlayer Extras paymentMethod totalPrice Payment OtherObject
  15. id status shippingAddress estimatedDelivery Order colour carId tires Customisations airConditioner

    mediaPlayer Extras paymentMethod totalPrice Payment Root entity + conceptual consistency boundary = Aggregate Aggregate root In your model OtherObject
  16. "Should <some concept> be an aggregate, an entity or a

    value object?" on the model It depends — Some DDD practitioner, probably
  17. find order by id find orders by status Persistence actions

    needed by the domain persist an order Order (aggregate)
  18. find order by id find orders by status Persistence actions

    needed by the domain Aggregates that need direct access + set of persistence actions needed by the domain = Repository persist an order Order (aggregate)
  19. = Repository OrderRepository + findById(id) + findAllByStatus(status) + store(order) Aggregates

    that need direct access + set of persistence actions needed by the domain
  20. Order (aggregate) Customer (aggregate) FinancingTerms (value object) Financing a car

    MonthlyPayment (value object) FinancingQuoteService ⇒ = Domain service Operation that stands alone in the model, without encapsulating state
  21. Next steps 1. Run away from the so-called "DDD lite"

    2. Start with either: - Domain-Driven Design Distilled (Vaughn Vernon) or Domain-Driven Design Quickly (Abel Avram and Floyd Marinescu) 3. Watch the talk "7 Reasons Why DDD Projects Fail" (Greg Young) <vimeo.com/13824218> 4. Make your fundamentals understanding solid, do not rush it - Domain-Driven Design aka The Blue Book (Eric Evans) or Learning Domain-Driven Design (Vlad Khononov) 5. Practice modeling and coding - Don't use AI for that, frustration is important for learning 6. Go deeper: - Learn EventStorming (Alberto Brandolini) and other techniques for domain discovery and modeling - Read Implementing Domain-Driven Design aka The Red Book (Vaughn Vernon) - Learn event-sourcing (and CQRS) - Read CQRS Documents (Greg Young) - Read Event-Driven <event-driven.io> (Oskar Dudycz) - Read Architecture for Flow (Susanne Kaiser)