Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to model the inside of a bounded context (how to go from Define to Code) ? #42

Open
GautierBlandin opened this issue Jul 1, 2023 · 5 comments

Comments

@GautierBlandin
Copy link

GautierBlandin commented Jul 1, 2023

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 !

@NTCoding
Copy link
Member

NTCoding commented Jul 1, 2023

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.

@GautierBlandin
Copy link
Author

GautierBlandin commented Jul 2, 2023

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:
Ingest Modeling - Frame 1

Ingest Modeling - Frame 2

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 !

@IvanRublev
Copy link

IvanRublev commented Jul 3, 2023

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

@peitor
Copy link

peitor commented Jul 3, 2023

I also found the below example from Christian Stettler interesting to see:

  • How far could you go to make the domain visible in code.
  • Where is it too far and the infrastructure complexity overweighs.

https://github.com/cstettler/ddd-to-the-code-workshop-sample

@NTCoding
Copy link
Member

NTCoding commented Jul 3, 2023

@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?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants