DEV Community

Cover image for Implementing Domain Driven Design - Day 2
DevByJESUS
DevByJESUS

Posted on

Implementing Domain Driven Design - Day 2

Heloooooooooooooo 😄

let's dive in for today.

1️⃣ Domains, Subdomains and Bounded contexts

Image description

  • Domain

A Domain, in the broad sense, is what an organization does and the world it does it in. Businesses identify a market and sell products and services. Each kind of organization has its own unique realm of know-how and way of doing things. That realm of understanding and its methods for carrying out its operations is its Domain. When you develop software for an organization, you are working in its Domain. It should be pretty obvious to you what your Domain is. You work in it. One thing to be aware of is that the term Domain may be a bit overloaded. Domain can refer to both the entire domain of the business, as well as just one
core or supporting area of it. I will do my best to distinguish each use of the term. When referring to just one area of the business, I will generally qualify it with the use of Core Domain, Subdomain, and the like.

2️⃣ Focus on Core domain, Generic domain and supporting subdomain

Image description

  • Core domain

A Core Domain is a part of the business Domain that is of primary importance to the success of the organization.
Strategically speaking, the business must excel with its Core Domain. It is of utmost importance to the ongoing success of the business. That project gets the highest priority, one or more domain experts with deep knowledge of that Subdomain, the best developers, and as much leeway and leverage as possible to give the close-knit team an unobstructed success path. Most of your DDD project efforts will be focused on the Core Domain.

  • Supporting Subdomain and Generic Subdomain

Sometimes a Bounded Context is created or acquired to support the business. If it models some aspect of the business that is essential, yet not Core, it is a Supporting Subdomain. The business creates a Supporting Subdomain because it is somewhat specialized.Otherwise, if it captures nothing special to the business, yet is required for the overall business
solution, it is a Generic Subdomain. Being Supporting or Generic doesn’t mean unimportant. These kinds of Subdomains are important to the success of the business, yet there is no need for the business to excel in these areas.

3️⃣ Problem Space and Solution Space

  • Problem Space

The problem space is the parts of the Domain that need to be developed to deliver a new Core Domain. Assessing the problem space involves examining Subdomains that already exist and those that are needed. Thus, your problem space is the combination of the Core Domain and the Subdomains it must use. The Subdomains in the problem space are usually different from project to project since they are used to explore a current strategic business problem. This makes Subdomains a very useful tool in
assessing the problem space. Subdomains allow us to rapidly view different parts of the Domain that are necessary to solve a specific problem.

✅ problem space questions !

What is the name of and vision for the strategic Core Domain?

What concepts should be considered part of the strategic Core Domain?

What are the necessary Supporting Subdomains and the Generic Subdomains?

Who should do the work in each area of the domain?

Can the right teams be assembled?

  • Solution Space

The solution space is one or more Bounded Contexts, a set of specific software models. That’s because the Bounded Context is a specific solution, a realization view, once developed. The Bounded Context is used to realize a solution as software.

✅ Solution space questions !

• What software assets already exist, and can they be reused?
• What assets need to be acquired or created?
• How are all of these connected to each other, or integrated?
• What additional integration will be needed?
• Given the existing assets and those that need to be created, what is the required effort?
• Do the strategic initiative and all supporting projects have a high probability of success, or will any one of them cause the overall program to be delayed or even fail?
• Where are the terms of the Ubiquitous Languages involved completely different?
• Where is there overlap and sharing of concepts and data between Bounded Contexts?
• How are shared terms and/or overlapping concepts mapped and translated between the Bounded Contexts?

That's all for my reading today. 😉

Top comments (0)