Once developers and domain experts speak the same language, production pipelines can move forward faster.
Most commercial software applications are created with a set of complex business requirements to solve specific business problems or needs. However, expecting all the software developers/architects to be experts on business domains and expecting them to know entire business functions is also impractical. On the other hand, how do we create software that brings value and has consumers who are in need of automation that will use the software? A software application cannot be just a showpiece of technical excellence, but in most cases, also real and usable of automated business excellence. The domain-driven design and models are the answers to those questions.
This short article talks about one of the key principles of Domain-Driven Design called "Ubiquitous Language" as DDD concepts, principles, and patterns bring technology and business excellence together to any sophisticated software applications that can be created and managed.
Talk Ubiquitously
Ubiquitous language is a model that acts as a universal language to help communication between software developers and domain experts.
Collaborating, learning, and defining a model brings a lot of initial communication barriers between software specialists and domain experts. So evolving domain model with practicing the same type of communications (discussions, writings, and in diagrams) within a context is paramount for successful implementations, and that sort of conversation is called Ubiquitous Language. It is structured around the domain model and extensively used by all the team members within a bounded context. It should be the medium or mode to connect all the activities of the team within the development of software.
The design team can establish deep understanding and connecting domain jargons and software entities with Ubiquitous language to keep discovering and evolving their domain models.
Ubiquitous Language
|
Equivalent Pseudo Code
|
Comments
|
We Administer Vaccines
|
AdministerVaccines {}
|
Not a core domain – need some more specific details
|
We administer flu Shots to patients
|
patientNeedAFluShot()
|
Better, may be missing some domain concepts
|
The nurse administers flu vaccines to a patient in standard doses
|
Nurse->administer vaccine(patient, Vaccine.getStandardDose())
|
Much better, and may be good to start with.
|
As we observe in the above table, there are various ways the user stories (requirements) can be given; however, the last row makes sense as it does have more clarity on what and how factors.
Hopefully, this article helps readers to get a glimpse of how DDD principles advocates and helps greater collaboration between subject matter experts, business analysts, nontechnology stakeholders with the technical/development community to produce complex domain driven systems.
[published @Dzone as well]