Domain-driven design
(DDD)
Domain-driven design (DDD) is the concept that the
structure and language of software code (class names, class
methods, class variables) should match the business
domain. For example, if a software processes loan
applications, it might have classes such as LoanApplication
and Customer, and methods such as AcceptOffer and
Withdraw.
DDD connects the implementation to an evolving model
Domain-driven design is predicated on the following
goals:
•Placing the project's primary focus on the core
domain and domain logic.
•Basing complex designs on a model of the domain
•Initiating a creative collaboration between technical
and domain experts to iteratively refine a conceptual
model that addresses particular domain problems.
Concepts of the model include:
Context
Contexts are portions of the solutions space. The setting in which
a word or statement appears that determines its meaning.
Domain
The subject area to which the user applies a program is the
domain of the software. It is also termed as sphere of
knowledge. In a banking system the following are the
highlighted domain models.
Model
A system of abstractions that describes selected aspects of
a domain and can be used to solve problems related to that
domain. The Domain Model itself could be a diagram, code
examples or even written documentation of the problem.
The important thing is, the Domain Model should be
accessible and understandable by everyone who is involved
with the system.
Domain Expert
Domain expert is a person who is an owner in a particular
area or topic.
Consider a banking system there can be different domains
such as Retail Banking, Corporate Banking, Home Lending,
Investment Banking, Insurance, cards services, ATMS are of
different type of domains. One dedicated person with
expertise to a specific domain will be responsible to handle
end to end business deliverables and solutions what a
business need. Domain experts works closely with
developers, end user, project management to successfully
deliver a system.
Ubiquitous Language
Ubiquitous language is a language communicated around the
domain model and used by all team members to connect all
the activities of the team with the software.
Advantages:
•Communication. All parties within a development
team can use the domain model and the entities it
defines to communicate business knowledge and
requirements using a common business domain
language, without requiring technical jargon.
•Extensible. The domain model is often modular and
flexible, making it easy to update and extend as
conditions and requirements change.
•Testable. The domain model objects are loosely
coupled and cohesive, allowing them to be more easily
tested.
Consider DDD if you have a complex domain and you wish to
improve communication and understanding within your
development team, or where you must express the design of
an application in a common language that all stakeholders can
understand. DDD can also be an ideal approach if you have
large and complex enterprise data scenarios that are difficult
to manage using other techniques.