└── README.md /README.md: -------------------------------------------------------------------------------- 1 | # my-ddd-journey 2 | A list of Domain-Driven Design resources that I found interesting on my journey studying DDD. 3 | 4 | # Books 5 | - Domain-Driven Design Distilled. Vaughn Vernon – 2016. 6 | - Implementing Domain Driven Design - Vaughn Vernon. 7 | - Domain-Driven Design: Tackling Complexity in the Heart of Software. Eric Evans - 2003. 8 | - The Anatomy Of Domain-Driven Design - Booklet https://leanpub.com/theanatomyofdomain-drivendesign 9 | - Designing Autonomous Teams and Services. Nick Tune and Scott Millett - 2017 http://www.oreilly.com/programming/free/designing-autonomous-teams-and-services.csp 10 | - CQRS Documents. Greg Young. 11 | https://github.com/keyvanakbary/cqrs-documents 12 | - Functional and Reactive Domain Modeling. Debasish Ghosh - 2016. 13 | - Domain Modeling Made Functional: Tackle Software Complexity with Domain-Driven Design and F#. Scott Wlaschin - 2018. 14 | - [Strategic Monoliths and Microservices: Driving Innovation Using Purposeful Architecture](https://www.goodreads.com/en/book/show/55782292). Vaughn Vernon, 15 | Tomasz Jaskula - 2021. 16 | - [Design and Reality](https://leanpub.com/design-and-reality). Rebecca Wirfs-Brock and Mathias Verraes - 2023. 17 | 18 | # Online Courses 19 | - [Domain-Driven Design Fundamentals by Julie Lerman and Steve Smith (6/2014)](https://app.pluralsight.com/library/courses/domain-driven-design-fundamentals/table-of-contents) 20 | - [Domain-Driven Design in Practice, Vladimir Khorikov. (1/2016)](https://app.pluralsight.com/library/courses/domain-driven-design-in-practice/table-of-contents) 21 | - [Domain-Driven Design Distilled, Vaughn Vernon. (3/2017)](https://www.safaribooksonline.com/library/view/domain-driven-design-distilled/9780134593449/) 22 | - CQRS Tutorial http://cqrs.nu/ 23 | - [Refactoring from Anemic Domain Model, Vladimir Khorikov](https://app.pluralsight.com/library/courses/refactoring-anemic-domain-model) [* My notes](https://paucls.wordpress.com/2019/01/23/my-notes-on-refactoring-from-anemic-domain-model-by-vladimir-khorikov/) 24 | - [CQRS in Practice, Vladimir Khorikov (10/2018)](https://app.pluralsight.com/library/courses/cqrs-in-practice/table-of-contents) [* My notes](https://paucls.wordpress.com/2019/01/12/my-notes-on-the-video-course-cqrs-in-practice-by-vladimir-khorikov/) 25 | - [Domain-Driven Design, Javier Ferrer and Rafa Gómez (2019)](https://pro.codely.tv/library/domain-driven-design-ddd/about/) 26 | - [DDD and EF Core: Preserving Encapsulation, Vladimir Khorikov. (4/3/2020)](https://app.pluralsight.com/library/courses/ddd-ef-core-preserving-encapsulation) 27 | - [Software Architecture: Domain-Driven Design, Allen Holub (18/09/2019)](https://www.linkedin.com/learning/software-architecture-domain-driven-design) 28 | 29 | # Podcasts 30 | - Interview Eric Evans, SE-Radio (09/03/2006) http://www.se-radio.net/2006/03/episode-8-interview-eric-evans/ 31 | - Eric Evans on Domain-Driven Design at 10 Years, SE-Radio (13/05/2015) http://www.se-radio.net/2015/05/se-radio-episode-226-eric-evans-on-domain-driven-design-at-10-years/ 32 | - Reactive Programming with the Actor Model, Vaughn Vernon, SE-Radio (12/02/2016) http://www.se-radio.net/2016/02/se-radio-episode-249-vaughn-vernon-on-reactive-programming-with-the-actor-model/ 33 | - Being The Worst. Audio apprenticeships for the aspiring software craftsman. Currently exploring DDD, Event Sourcing, CQRS, distributed systems, etc. http://www.beingtheworst.com/ 34 | - Domain Driven Design and Micro Services, Vaughn Vernon. (17/08/208) 35 | https://corecursive.com/018-micro-services-and-domain-driven-design-with-vaughn-vernon/ 36 | - Domain-Driven Design & Event Storming, Jakub Pilimon (5/12/2018) 37 | https://content.pivotal.io/podcasts/domain-driven-design-event-storming-with-jakub-pilimon 38 | 39 | # Articles 40 | 41 | ## Aggregates 42 | - DDD Decoded - The Aggregate and Aggregate Root Explained, Mike Mogosanu 43 | http://blog.sapiensworks.com/post/2016/07/14/DDD-Aggregate-Decoded-1 44 | - Identifying An Aggregate Is Not Object Oriented Design, Mike Mogosanu 45 | http://blog.sapiensworks.com/post/2018/01/08/DDD-Aggregate-groups-behaviour-not-data 46 | - Strengthening your domain: Aggregate Construction, Jimmy Bogard (24/02/2010) 47 | https://lostechies.com/jimmybogard/2010/02/24/strengthening-your-domain-aggregate-construction/ 48 | - Aggregate Roots Should Look After Their Own Events, Mike Mogosanu (22/05/2014) 49 | http://blog.sapiensworks.com/post/2014/05/22/Aggregate-Roots-Should-Look-After-Their-Own-Events.aspx.html 50 | - DDD - Persisting Aggregate Roots In A Unit Of Work, Mike Mogosanu (01/05/2013) 51 | http://blog.sapiensworks.com/post/2013/05/01/DDD-Persisting-Aggregate-Roots-In-A-Unit-Of-Work.aspx 52 | - Aggregates and RFC 2119, Danil Suits (05/02/2017) 53 | http://cascadefaliure.vocumsineratio.com/2017/02/aggregates-and-rfc-2119.html 54 | 55 | ## Entities 56 | - How *not* to inject services in entities, Jeremie Chassaing (04/03/2009) 57 | https://thinkbeforecoding.com/post/2009/03/04/How-not-to-inject-services-in-entities 58 | [Explains how Double Dispatch can be the solution when an Entity needs to use a service] 59 | - Entities should look after their own events, Mat McLoughlin 60 | http://mat-mcloughlin.net/2014/05/22/entities-should-look-after-their-own-events/ 61 | - A Better Way to Project Domain Entities into DTOs, Nick Chamberlain 62 | https://buildplease.com/pages/repositories-dto/ [Should the projection from Aggregate(s) to DTO be done inside your Repositories?] 63 | 64 | ## Value Objects 65 | - Value Objects Like a Pro, Nicolò Pignatelli 66 | https://hackernoon.com/value-objects-like-a-pro-f1bfc1548c72 67 | - Domain-Driven Design: The Identifier Type Pattern, Gara Mohamed 68 | https://medium.com/@gara.mohamed/domain-driven-design-the-identifier-type-pattern-d86fd3c128b3 [... Primitive Identifier vs Type Identifier and Value Objects in TypeScript] 69 | 70 | ## Domain Services 71 | - Services in Domain-Driven Design, Jimmy Bogard 72 | https://lostechies.com/jimmybogard/2008/08/21/services-in-domain-driven-design/ 73 | - Strengthening your domain: The double dispatch pattern, Jimmy Bogard 74 | https://lostechies.com/jimmybogard/2010/03/30/strengthening-your-domain-the-double-dispatch-pattern/ 75 | - And Then This Happened, Vaughn Vernon (24/11/2018) https://kalele.io/cqrs/and-then-this-happened/ [ how using Domain Events or not using them can impact the Command Model and the projection of changes into the Query Model] 76 | 77 | ## Application Services 78 | - Application Services - 10 common doubts answered, Robert Pankowecki (23/12/2017). 79 | https://blog.arkency.com/application-service-ruby-rails-ddd/ 80 | - Services in Domain-Driven Design (DDD), Lev Gorodinski (14/04/2012) 81 | http://gorodinski.com/blog/2012/04/14/services-in-domain-driven-design-ddd/ 82 | [Shows full example with: application service PurchaseOrderService, aggregate root PurchaseOrder, value object Invoice, etc.] 83 | 84 | ## Domain Events 85 | - A better domain events pattern, Jimmy Bogard (2014/05/13). 86 | https://lostechies.com/jimmybogard/2014/05/13/a-better-domain-events-pattern/ 87 | - Domain Events vs. Integration Events in Domain-Driven Design and microservices architectures, Cesar de la Torre (07/02/2017). 88 | https://blogs.msdn.microsoft.com/cesardelatorre/2017/02/07/domain-events-vs-integration-events-in-domain-driven-design-and-microservices-architectures/ 89 | - Domain events: design and implementation. https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/microservice-ddd-cqrs-patterns/domain-events-design-implementation 90 | - Domain events: simple and reliable solution, Vladimir Khorikov https://enterprisecraftsmanship.com/2017/10/03/domain-events-simple-and-reliable-solution/ 91 | - DDD – Aggregate Roots and Domain Events publication, Paulo Clavijo https://paucls.wordpress.com/2018/05/31/ddd-aggregate-roots-and-domain-events-publication/ 92 | ### Implemented using Spring 93 | - Spring - Domain event publication from aggregate roots, Mark Paluch (30/01/2017). 94 | https://spring.io/blog/2017/01/30/what-s-new-in-spring-data-release-ingalls#domain-event-publication-from-aggregate-roots 95 | - Spring events and transactions — be cautious!, Zbigniew Artemiuk (30/10/2018) https://blog.pragmatists.com/spring-events-and-transactions-be-cautious-bdb64cb49a95 96 | - Transaction Synchronization and Spring Application Events: Understanding @TransactionalEventListener, Bartłomiej Słota (04/08/2017) 97 | https://dzone.com/articles/transaction-synchronization-and-spring-application 98 | 99 | ## Event Sourcing 100 | - Scalable Microservices with Event Sourcing and Redis, Tom Mooney (13/12/2017) 101 | https://medium.com/lcom-techblog/scalable-microservices-with-event-sourcing-and-redis-6aa245574db0 102 | - Don't Let the Internet Dupe You, Event Sourcing is Hard. Chris Kiehl. (02/03/2019) 103 | https://chriskiehl.com/article/event-sourcing-is-hard 104 | 105 | ## Specification Pattern 106 | - DDD and bulk operations, Vladimir Khorikov (28/10/2019) 107 | https://enterprisecraftsmanship.com/posts/ddd-bulk-operations/ 108 | 109 | ## Supporting Architectures 110 | - DDD, Hexagonal, Onion, Clean, CQRS, … How I put it all together, Herberto Graça 111 | https://herbertograca.com/2017/11/16/explicit-architecture-01-ddd-hexagonal-onion-clean-cqrs-how-i-put-it-all-together/ 112 | - Hexagonal Architecture for Rails Developers, Victor Savkin (23/07/2016) 113 | https://medium.com/@vsavkin/hexagonal-architecture-for-rails-developers-8b1fee64a613 114 | - Vertical Slice Architecture, Jimmy Bogard (19/04/2018) 115 | https://jimmybogard.com/vertical-slice-architecture/ 116 | - Is Layering Worth the Mapping?, Mark Seemann (9/1/2012) http://blog.ploeh.dk/2012/02/09/IsLayeringWorththeMapping 117 | - How CQRS Works with Spring Tools, Jakub Pilimon (16/10/2018) 118 | https://thenewstack.io/how-cqrs-works-with-spring-tools/ 119 | - Real world implementation of the Clean Architecture, Jeroen De Dauw 120 | https://entropywins.wtf/slides/fun-architecture/index.html#/ 121 | 122 | ## Other 123 | - Domain model purity vs. domain model completeness, Vladimir Khorikov (04/08/2020) 124 | https://enterprisecraftsmanship.com/posts/domain-model-purity-completeness 125 | - Authentication and Authorization in DDD, José Luis Martínez (8/01/2016) 126 | https://medium.com/@martinezdelariva/authentication-and-authorization-in-ddd-671f7a5596ac 127 | - Domain-Driven Design vs. Anemic model. How do they differ?, Kamil Berdychowski (03/01/2017) https://blog.pragmatists.com/domain-driven-design-vs-anemic-model-how-do-they-differ-ffdee9371a86 [Anemic model and bulky services vs Rich model and thin services] 128 | - Refactoring from anemic model to DDD, Zbigniew Artemiuk (18/04/2017) 129 | https://blog.pragmatists.com/refactoring-from-anemic-model-to-ddd-880d3dd3d45f [refactoring repository to make it independent from implementation ...] 130 | 131 | ### REST 132 | - There is No U in CRUD, James Hood (25/07/2017) [resist the urge to follow the CRUD model for service APIs (use DDD to define your API in terms of domain objects and the business operations] 133 | http://jlhood.com/there-is-no-u-in-crud/ 134 | 135 | # Q&A 136 | ## Aggregates 137 | - DDD - Fictitious Aggregate Root 138 | https://stackoverflow.com/a/46947901 139 | - Consistency across Aggregate Root 140 | https://groups.google.com/forum/#!topic/dddcqrs/qf0EzujnDWA 141 | - Aggregate roots coordinating their entities in an event sourcing system [Should an AR wrap the behavior of its entities?] 142 | https://groups.google.com/forum/#!topic/dddcqrs/T9bWd48e40I 143 | 144 | ## Entities 145 | - DDD Injecting Services on Entity Methods Calls [Is it within best practices of DDD and OOP to inject services on entity method calls?] 146 | https://softwareengineering.stackexchange.com/questions/357969/ddd-injecting-services-on-entity-methods-calls 147 | - DDD - Persistence Model and Domain Model https://stackoverflow.com/questions/14024912/ddd-persistence-model-and-domain-model 148 | - Spring Boot: How to keep DDD entities clean from JPA/Hibernate Annotations? https://stackoverflow.com/questions/58018542/spring-boot-how-to-keep-ddd-entities-clean-from-jpa-hibernate-annotations 149 | - DDD - the rule that Entities can't access Repositories directly https://stackoverflow.com/questions/5694241/ddd-the-rule-that-entities-cant-access-repositories-directly 150 | 151 | # Talks 152 | - Domain Driven Design: The Good Parts. Jimmy Bogard. (08/2016) 153 | https://youtu.be/U6CeaA-Phqo 154 | - A Decade of DDD, CQRS, Event Sourcing. Greg Young. DDD Europe. (29/01/2016) 155 | https://youtu.be/LDW0QWie21s 156 | - Eric Evans: What I've learned about DDD since the book. (2009) 157 | https://youtu.be/lE6Hxz4yomA 158 | - Evil by Design, Jef Claes. (01/2016) [Visualization of events on a ES system] 159 | https://youtu.be/EmMvnB2v1GQ 160 | - DDD Strategic Design With Spring Boot, Michael Plod. (2017) [Introduction to Bounded Context and Context Maps] 161 | https://youtu.be/DXbmfcgOvUI 162 | https://speakerdeck.com/mploed/ddd-strategic-design-with-spring-boot-examples 163 | - Case Study: Practical tools and strategies for tackling legacy practices and legacy systems in a fast-growing startup, Alejandro Scandroli 164 | https://www.slideshare.net/ascandroli/case-study-practical-tools-and-strategies-for-tackling-legacy-practices-and-legacy-systems-in-a-fastgrowing-startup 165 | - Case Study: tools and strategies for tackling legacy practices, Alejandro Scandroli. (2018) 166 | https://youtu.be/i8GzkkMWGYE [DDD strategic design, Wardley Maps, ...] 167 | - Domain Language throughout Tests, combining DDD and BDD. Kenny Baas 168 | https://youtu.be/xSZnKnZ8EAo [event storming, feature mapping, example mapping, ...] 169 | - From Legacy Chaos to the Promised Land of DDD, Anita Kvamme and Ellen Lippe, 2018 170 | https://youtu.be/bnaYU4fjGe4 171 | [...changing software architecture and code isn't really about changing software architecture and code, it's about the people, it's about each individual and the interaction between them, it's about helping team members changing habits, to mentor and teach new skills, most of all to work all align together as a team] 172 | - DDD Lessons, Barry O'Sullivan (2018) [Domains and SubDomains are composable. Bounded Contexts are independent (not composable).] 173 | https://youtu.be/PMWl5X1sK70 174 | - Language in Context, Eric Evans (2019) 175 | https://youtu.be/xyuKx5HsGK8 176 | 177 | # Presentations 178 | - Adopting Domain Driven Design in your organization, Aleix Morgadas. (03/11/2018) https://docs.google.com/presentation/d/1Yiw6_u0rcJVHNBjnis56HdBiVg0-aGEMQPG06XG37zA 179 | - DDD Modeling Workshop, Dennis Traub (22/10/2012) 180 | https://www.slideshare.net/Dennis_Traub/ddd-modeling-workshop 181 | - Brownfield Domain Driven Design, Nicolò Pignatelli 182 | https://www.slideshare.net/NicolPignatelli/brownfield-domain-driven-design-48240538 183 | 184 | ## Domain Events 185 | - Domain Event - The Hidden Gem of DDD, Henrik Møller Rasmussen 186 | https://www.slideshare.net/heinodk/domain-event-the-hidden-gem-of-ddd 187 | 188 | ## Functional DDD 189 | - Functional architecture - The pits of success, Mark Seemann. (07/2016) 190 | https://youtu.be/US8QG9I1XW0 191 | 192 | ## Supporting Architectures 193 | - Evolutionary Software Architectures, Neal Ford [Technical Architecture vs Domain Architecture] https://youtu.be/CglSFhwbI3s 194 | - The Actor Model, Hewitt, Meijer and Szyperski 195 | https://channel9.msdn.com/Shows/Going+Deep/Hewitt-Meijer-and-Szyperski-The-Actor-Model-everything-you-wanted-to-know-but-were-afraid-to-ask 196 | 197 | # Other Resources 198 | - DDD Heuristics (Heuristics to share and use for designing software) 199 | https://www.dddheuristics.com/ 200 | - Domain-Driven Design Starter Modelling Process 201 | https://github.com/ddd-crew/ddd-starter-modelling-process 202 | 203 | # Sample projects 204 | - DDD Sample Core 205 | https://github.com/citerus/dddsample-core 206 | - IDDD 207 | https://github.com/VaughnVernon/IDDD_Samples 208 | - BookARoom is a simple project to explain CQRS, Thomas Pierrain 209 | https://github.com/tpierrain/CQRS/blob/master/README.md 210 | - Domain Driven Design Example C#, Zan Kavtaskin 211 | https://github.com/zkavtaskin/Domain-Driven-Design-Example 212 | - All Things CQRS, A bunch of ways of doing CQRS with various Spring tools, Jakub Pilimon 213 | https://github.com/ddd-by-examples/all-things-cqrs 214 | - Acerola: Hexagonal Architecture 215 | https://github.com/ivanpaulovich/hexagonal-architecture-acerola 216 | - Project Spring DDD Bank, Christoph Knabe 217 | https://github.com/ChristophKnabe/spring-ddd-bank 218 | - A comprehensive Domain-Driven Design example with problem space strategic analysis and various tactical patterns. 219 | https://github.com/ddd-by-examples/library 220 | 221 | # Katas / Exercises 222 | - Transport Tycoon Exercises for DDD 223 | https://github.com/Softwarepark/exercises/blob/master/transport-tycoon.md 224 | --------------------------------------------------------------------------------