Open GautierBlandin opened 1 year ago
Hey Gautier,
This is not a silly question at all. There are many resources out there for implementing a domain model. My personal favourite is the work done by Scott Wlaschin, because I like the type-driven, object-functional approach.
The best resource is his book, Domain Modeling Made Functional. But you can watch some of his talks for free, like this one: https://www.youtube.com/watch?v=2JB1_e5wZmU
If you have a training budget, then you could even try attending one of Scott's workshops: https://www.avanscoperta.it/en/training/domain-modeling-made-functional-workshop/
I'm sure other people will suggest other resources, so I'm not saying the above is best, just my personal favourites.
Would you guys consider adding, either as a separate step in between Define and Code, or as a part of the Code step, something about Workflow Modeling ? (if yes, I could start working on a PR for that)
Here's the kind of diagrams I'm getting:
I feel like modeling the actual workflows feeds very naturally into understanding what the aggregates actually are.
@NTCoding many thanks for the book recommendation, it was exactly what I needed and an amazing read !
One of the possible ways to go from bounded context definitions to code is to play with your domain model in code. Many modelling practices are to get a common shared understanding with your team, and coding can be considered the same. You can look at it as the step to review - how your model fits the possible implementation with the constrained technology available and to have feedback about your findings from stakeholders.
Here is a fresh example https://www.youtube.com/live/bl0E7-ov4gw
I also found the below example from Christian Stettler interesting to see:
https://github.com/cstettler/ddd-to-the-code-workshop-sample
@GautierBlandin the model exploration whirlpool shows how to iteratively design and implement a model. It's explained right at the bottom of the readme in this repo. Maybe we need to find some way of articulating that a bit earlier in the process for newcomers.
Maybe we could still add something in-between or maybe we can rename "code" to "implement". But there are definitely two broad activities going on there: defining the conceptual model and implementing in software with a lot of overlap.
Your workflow example looks a bit like Software Design EventStorming. Are you familiar with that technique?
Disclaimer: I am a junior (1.5 y.o.e) software engineer, and I apologize if my questions seem silly.
The starter modelling process is very nice as it provides a clear path to go from nothing to a well-defined system. That being said, I struggle with the last (and crucial) step of going from the bounded context definition to actual code.
The Aggregate Design Canvas helps in defining the aggregates, but it doesn't help me in first finding what the appropriate aggregates are in the first place.
I understand that Design-Level EventStorming and Event Modeling are techniques that can be used to bridge that gap. However, as a first-timer, going from the theory to the practice is rather daunting, and I think that having concrete examples of the processes involved (Bounded context definition --> Event Modeling / other steps --> Aggregates definition) could be very helpful.
By any chance, do you know of existing resources / workshop recordings that showcase the actual implementation of these processes ? I'm really not looking for resources that explain DDD concepts, but rather resources that showcase the application of the DDD concepts all the way down to being able to write code.
Thanks in advance !