In a previous blog, I discussed how I recently discovered through eventual consistency that I had poor business alignment. With more thoughts and insights, I wanted to extend that post by discussion bounded contexts and how they fit within subdomains.
1 to 1?
I’ve often thought of a bounded context as being a one-to-one relationship with a subdomain. To take that further, you may get the impression that they are indeed the same thing. When I was first introduced to the concept many years ago, I was under the impression that they mapped directly one to one.
I’m not entirely sure why I had this perception early on. It may be due examples or just the assumption I made. I do not remember actually ever reading how a subdomain and a bounded context don’t map directly one to one.
Over the years I’ve realized this not to be the case, but always had a tough time giving an explanation that others could visualize.
I heard Eric Evans gave a great example that I will paraphrase, which should help you visualize the difference.
Living Room Floor
Imagine a room in your house. It may have a closet or some different length walls which makes it not totally uniform. Imagine there is carpet in this room. The carpet covers every inch of the floor. Wall to wall carpet.
This carpet represents your bounded context.
Underneath the carpet, say the cement, is your subdomain.
It just so happens that your bounded context is mapped to your subdomain exactly. However, that is just because the bounded context (carpet) was designed that way.
A bounded context doesn’t necessarily need to cover the entire subdomain. It only needs to cover the aspects of the subdomain which help solve the problem space.
To use the carpet analogy again, I mentioned that the room wasn’t completely uniform as maybe it had a closet in it. The carpet doesn’t need to cover the entire floor beneath it. There may be bare floor exposed in the closet because that portion of the subdomain doesn’t require to be modeled as it isn’t needed for problem you are trying to solve.
More Than One?
I’m still trying to determine if a subdomain can have more than one bounded context. I do think it may be possible if you are implementing something technical apart of that subdomain. I would love to hear others thoughts on this.