Domain-Driven Design: Tackling Complexity in the Heart of Software
Rate it:
Open Preview
3%
Flag icon
The greatest value of a domain model is that it provides a ubiquitous language that ties domain experts and technologists together.
4%
Flag icon
Yet the most significant complexity of many applications is not technical. It is in the domain itself, the activity or business of the user.
6%
Flag icon
it is a rigorously organized and selective abstraction of that knowledge.
6%
Flag icon
a domain modeler chooses a particular model for its utility.
6%
Flag icon
The model and the heart of the design shape each other.
6%
Flag icon
intimate link between the model and the implementation that makes the model relevant and ensures that the analysis that went into it applies to the final product,
6%
Flag icon
2. The model is the backbone of a language used by all team members.
6%
Flag icon
They can communicate with domain experts without translation.
Richard Faust
interview questions are domain model related
6%
Flag icon
our natural linguistic abilities can be turned to refining the model itself.
6%
Flag icon
The model is distilled knowledge.
6%
Flag icon
A model captures how we choose to think about the domain as we select terms, break down concepts, and relate them.
6%
Flag icon
The heart of software is its ability to solve domain-related problems for its user.
6%
Flag icon
Domain work is messy and demands a lot of complicated new knowledge that doesn’t seem to add to a computer scientist’s capabilities.
6%
Flag icon
Instead, the technical talent goes to work on elaborate frameworks, trying to solve domain problems with technology. Learning about and modeling the domain is left to others.
6%
Flag icon
Complexity in the heart of software has to be tackled head-on. To do otherwise...
This highlight has been truncated due to consecutive passage length restrictions.
6%
Flag icon
A software developer has that same prospect when facing a complicated domain that has never been formalized. Creating a lucid model that cuts through that complexity is exciting.
7%
Flag icon
The concreteness of this prototype made clearer to the domain experts what the model meant and how it related to the functioning software. From that point, our model discussions became more interactive, as they could see how I incorporated my newly acquired knowledge into the model and then into the software.
7%
Flag icon
The language, combined with sketches and a brainstorming attitude, turned our discussions into laboratories of the model, in which hundreds of experimental variations could be exercised, tried, and judged.
7%
Flag icon
Effective domain modelers are knowledge crunchers. They take a torrent of information and probe for the relevant trickle. They try one organizing idea after another, searching for the simple view that makes sense of the mass. Many models are tried and rejected or transformed. Success comes in an emerging set of abstract concepts that makes sense of all the detail. This distillation is a rigorous expression of the particular knowledge that has been found most relevant.
7%
Flag icon
In the old waterfall method, the business experts talk to the analysts, and analysts digest and abstract and pass the result along to the programmers, who code the software. This approach fails because it completely lacks feedback.
8%
Flag icon
if programmers are not interested in the domain, they learn only what the application should do, not the principles behind it. Useful software can be built that way, but the project will never arrive at a point where powerful new features unfold as corollaries to older features.
8%
Flag icon
The constant refinement of the domain model forces the developers to learn the important principles of the business they are assisting, rather than to produce functions mechanically. The
8%
Flag icon
These models are never perfect; they evolve. They must be practical and useful in making sense of the domain. They must be rigorous enough to make the application simple to implement and understand.
8%
Flag icon
Reorganization scatters the team, and the knowledge is fragmented again.
8%
Flag icon
with typical design approaches, the code and documents don’t express this hard-earned knowledge in a usable form, so when the oral tradition is interrupted for any reason, the knowledge is lost.
8%
Flag icon
A voyage of discovery has to start somewhere.
8%
Flag icon
Business activities and rules are as central to a domain as are the entities involved; any domain will have various categories of concepts.
Richard Faust
so far into the book I miss the rationale for how things are and for what should change
8%
Flag icon
knowledge crunching can get intense, because there may be actual inconsistency among business rules.
8%
Flag icon
As written, it is unlikely that any business expert could read this code to verify the rule, even with the guidance of a developer. 2. It would be difficult for a technical, non-businessperson to connect the requirement text with the code.
8%
Flag icon
The overbooking rule is a policy. Policy is another name for the design pattern known as STRATEGY
9%
Flag icon
Now, I am not recommending that such an elaborate design be applied to every detail of the domain.
Richard Faust
similar to the reasoning that goes into what should or shouldn't be a business rule
9%
Flag icon
In order to bring the design to this stage, the programmers and everyone else involved will have come to understand the nature of overbooking as a distinct and important business rule, not just an obscure calculation.
9%
Flag icon
As we come to understand the domain and the needs of the application, we usually discard superficial model elements that seemed important in the beginning, or we shift their perspective.
9%
Flag icon
This was all necessary and useful, yet the domain experts felt dissatisfied.
9%
Flag icon
Often, the cargo would sit in a warehouse while important steps were being taken. At other times, the cargo would move through complex physical steps that were not relevant to the shipping company’s business decisions.
9%
Flag icon
profoundly. Our view of shipping changed from moving containers from place to place, to transferring responsibility for cargo from entity to entity. Features
9%
Flag icon
These terms and interrelationships provide the semantics of a language that is tailored to the domain while being precise enough for technical development.
9%
Flag icon
This model-based communication is not limited to diagrams in Unified Modeling Language (UML). To make most effective use of a model, it needs to pervade every medium of communication. It increases the utility of written text documents, as well as the informal diagrams and casual conversation reemphasized in Agile processes. It improves communication through the code itself and through the tests for that code.
9%
Flag icon
A few members of the team manage to become bilingual, but they become bottlenecks of information flow, and their translations are inexact.
9%
Flag icon
On a project without a common language, developers have to translate for domain experts. Domain experts translate between developers and still other domain experts. Developers even translate for each other. Translation muddles model concepts, which leads to destructive refactoring of code. The indirectness of communication conceals the formation of schisms—different team members use terms differently but don’t realize it. This leads to unreliable software that doesn’t fit together (see Chapter 14). The effort of translation prevents the interplay of knowledge and ideas that lead to deep model ...more
9%
Flag icon
And even the same person uses different language in speech and in writing, so that the most incisive expressions of the domain often emerge in a transient form that is never captured in the code or even in writing.
9%
Flag icon
Persistent use of the UBIQUITOUS LANGUAGE will force the model’s weaknesses into the open.
9%
Flag icon
These changes to the language will be recognized as changes in the domain model and will lead the team to update class diagrams and rename classes and methods in the code, or even change behavior, when the meaning of a term changes.
9%
Flag icon
Of course, domain experts will speak outside the scope of the UBIQUITOUS LANGUAGE, to explain and give broader context. But within the scope the model addresses, they should use LANGUAGE and raise concerns when they find it awkward or incomplete—or wrong. By using the model-based language pervasively and not being satisfied until it flows, we approach a model that is complete and comprehensible, made up of simple elements that combine to express complex ideas.
9%
Flag icon
Therefore: Use the model as the backbone of a language. Commit the team to exercising that language relentlessly in all communication within the team and in the code. Use the same language in diagrams, writing, and especially speech.
10%
Flag icon
Domain experts should object to terms or structures that are awkward or inadequate to convey domain understanding; developers should watch for ambiguity or inconsistency that will trip up design.
10%
Flag icon
With a UBIQUITOUS LANGUAGE, the model is not just a design artifact. It becomes integral to everything the developers and domain experts do together. The LANGUAGE carries knowledge in a dynamic form. Discussion in the LANGUAGE brings to life the meaning behind the diagrams and code.
10%
Flag icon
In each scenario, watch for how much the speakers talk about what the software means to the business versus how it works technically. Are the user and developer speaking the same language? Is that language rich enough to carry the discussion of what the application must do?
10%
Flag icon
The user employed the word “itinerary” in both dialogs, but in the second it was an object the two could discuss precisely, concretely. They discussed the “route specification” explicitly, instead of describing it each time in terms of attributes and procedures.
10%
Flag icon
The detachment of speech from other forms of communication is a particularly great loss because we humans have a genius for spoken language. Unfortunately, when people speak, they usually don’t use the language of the domain model.
« Prev 1 3 6