leveraging more then ddd lite in the startup project
DESCRIPTION
Short presentation about how Domain Driven Design help me with my startup project. A lightweight CQRS approach was used (commands separated from queries without other ceremony).TRANSCRIPT
![Page 1: Leveraging more then DDD Lite in the startup project](https://reader036.vdocument.in/reader036/viewer/2022070322/5593396b1a28abed2c8b45a3/html5/thumbnails/1.jpg)
![Page 2: Leveraging more then DDD Lite in the startup project](https://reader036.vdocument.in/reader036/viewer/2022070322/5593396b1a28abed2c8b45a3/html5/thumbnails/2.jpg)
Points to consider
• First rapide release• Should it be dirty but fast ?• Fear of overengeeniring / overdesign• Lack of explicit domain• Lack of domain expert
![Page 3: Leveraging more then DDD Lite in the startup project](https://reader036.vdocument.in/reader036/viewer/2022070322/5593396b1a28abed2c8b45a3/html5/thumbnails/3.jpg)
What we’re exactly doing ?
Phase 1• Gather user profiles• Offer configurable visual templates• Share on social networksPhase 2• Web intelligence matching algo• Feedback collecting• Job offer recommendations
![Page 4: Leveraging more then DDD Lite in the startup project](https://reader036.vdocument.in/reader036/viewer/2022070322/5593396b1a28abed2c8b45a3/html5/thumbnails/4.jpg)
Going down the DDD path…
• We want to avoid architecture 2011 effect
![Page 5: Leveraging more then DDD Lite in the startup project](https://reader036.vdocument.in/reader036/viewer/2022070322/5593396b1a28abed2c8b45a3/html5/thumbnails/5.jpg)
What DDD could bring us ?
• Staying on the right track
![Page 6: Leveraging more then DDD Lite in the startup project](https://reader036.vdocument.in/reader036/viewer/2022070322/5593396b1a28abed2c8b45a3/html5/thumbnails/6.jpg)
![Page 7: Leveraging more then DDD Lite in the startup project](https://reader036.vdocument.in/reader036/viewer/2022070322/5593396b1a28abed2c8b45a3/html5/thumbnails/7.jpg)
What benefit DDD could bring us ?
• Staying on the right track• Explicit behavior• Discovering concepts by challenging
constantly what we know about the model• Application features are going to change often
over the years (Vaughn Vernon IDDD book)• You don’t understand the domain because it’s
new (Vaughn Vernon IDDD book)
![Page 8: Leveraging more then DDD Lite in the startup project](https://reader036.vdocument.in/reader036/viewer/2022070322/5593396b1a28abed2c8b45a3/html5/thumbnails/8.jpg)
Strategic design
• Working on the use cases from screens• Making a model• Challenging your assumptions• Starting to define UL• Code / Refactor• Iterate over the points above
![Page 9: Leveraging more then DDD Lite in the startup project](https://reader036.vdocument.in/reader036/viewer/2022070322/5593396b1a28abed2c8b45a3/html5/thumbnails/9.jpg)
![Page 10: Leveraging more then DDD Lite in the startup project](https://reader036.vdocument.in/reader036/viewer/2022070322/5593396b1a28abed2c8b45a3/html5/thumbnails/10.jpg)
CQRS… what ?
Idea behind• Separate write from readsPoints to consider• Do I need a separate data store for r/w ?• Do I need ES ?• Do I need Event Store ?• Do I need Domain Events ? (more DDD part)
![Page 11: Leveraging more then DDD Lite in the startup project](https://reader036.vdocument.in/reader036/viewer/2022070322/5593396b1a28abed2c8b45a3/html5/thumbnails/11.jpg)
![Page 12: Leveraging more then DDD Lite in the startup project](https://reader036.vdocument.in/reader036/viewer/2022070322/5593396b1a28abed2c8b45a3/html5/thumbnails/12.jpg)
![Page 13: Leveraging more then DDD Lite in the startup project](https://reader036.vdocument.in/reader036/viewer/2022070322/5593396b1a28abed2c8b45a3/html5/thumbnails/13.jpg)
UI
![Page 14: Leveraging more then DDD Lite in the startup project](https://reader036.vdocument.in/reader036/viewer/2022070322/5593396b1a28abed2c8b45a3/html5/thumbnails/14.jpg)
UI
![Page 15: Leveraging more then DDD Lite in the startup project](https://reader036.vdocument.in/reader036/viewer/2022070322/5593396b1a28abed2c8b45a3/html5/thumbnails/15.jpg)
Domain
![Page 16: Leveraging more then DDD Lite in the startup project](https://reader036.vdocument.in/reader036/viewer/2022070322/5593396b1a28abed2c8b45a3/html5/thumbnails/16.jpg)
Infrastructure CommandProc
![Page 17: Leveraging more then DDD Lite in the startup project](https://reader036.vdocument.in/reader036/viewer/2022070322/5593396b1a28abed2c8b45a3/html5/thumbnails/17.jpg)
Validation
![Page 18: Leveraging more then DDD Lite in the startup project](https://reader036.vdocument.in/reader036/viewer/2022070322/5593396b1a28abed2c8b45a3/html5/thumbnails/18.jpg)
Validation Ex: 2
![Page 19: Leveraging more then DDD Lite in the startup project](https://reader036.vdocument.in/reader036/viewer/2022070322/5593396b1a28abed2c8b45a3/html5/thumbnails/19.jpg)
Validation Ex: 3
![Page 20: Leveraging more then DDD Lite in the startup project](https://reader036.vdocument.in/reader036/viewer/2022070322/5593396b1a28abed2c8b45a3/html5/thumbnails/20.jpg)
Domain
![Page 21: Leveraging more then DDD Lite in the startup project](https://reader036.vdocument.in/reader036/viewer/2022070322/5593396b1a28abed2c8b45a3/html5/thumbnails/21.jpg)
Breaking the rule
• Rule of thumb : One aggregate state modification per transaction
![Page 22: Leveraging more then DDD Lite in the startup project](https://reader036.vdocument.in/reader036/viewer/2022070322/5593396b1a28abed2c8b45a3/html5/thumbnails/22.jpg)
![Page 23: Leveraging more then DDD Lite in the startup project](https://reader036.vdocument.in/reader036/viewer/2022070322/5593396b1a28abed2c8b45a3/html5/thumbnails/23.jpg)
UI
![Page 24: Leveraging more then DDD Lite in the startup project](https://reader036.vdocument.in/reader036/viewer/2022070322/5593396b1a28abed2c8b45a3/html5/thumbnails/24.jpg)
Infrastructure
![Page 25: Leveraging more then DDD Lite in the startup project](https://reader036.vdocument.in/reader036/viewer/2022070322/5593396b1a28abed2c8b45a3/html5/thumbnails/25.jpg)
Wrap up
What I’ve achieved• Decoupling• Maintanibility• ExtensibilityWhat bothers me• Mapping (« at boundaries, application are not
object oriented » Mark Seemann)
![Page 26: Leveraging more then DDD Lite in the startup project](https://reader036.vdocument.in/reader036/viewer/2022070322/5593396b1a28abed2c8b45a3/html5/thumbnails/26.jpg)
Proof