Domain-Driven Design: Tackling Complexity in the Heart of Software
Rate it:
Open Preview
Read between May 28, 2022 - September 10, 2023
3%
Flag icon
But the heart of this complexity is the essential intricacy of the problem domain itself.
3%
Flag icon
If you’re trying to add automation to complicated human enterprise, then your software cannot dodge this complexity—all it can do is control it.
3%
Flag icon
An effective domain modeler can not only use a whiteboard with an accountant, but also write Java with a programmer.
3%
Flag icon
Partly this is true because you cannot build a useful conceptual model without considering implementation issues.
3%
Flag icon
But the primary reason why concepts and implementation belong together is this: The greatest value of a domain model is that it provides a ubiquitous language that t...
This highlight has been truncated due to consecutive passage length restrictions.
3%
Flag icon
But the lesson of Eric’s experience is that the really powerful domain models evolve over time, and even the most experienced modelers find that they gain their best ideas after the initial releases of a system.
4%
Flag icon
Although it has never been formulated clearly, a philosophy has emerged as an undercurrent in the object community, a philosophy I call domain-driven design.
Alexandre Gomes
The author describes Domain-Driven Design as a philosophhy that has emerged as an undercurrent in the object community (a pattern language as is my interpretation) and not as some meta-architecture and process designed from the top-bottom
4%
Flag icon
When I took a close look, I saw that they lacked a domain model, or even a common language on the project, and were saddled with an unstructured design.
Alexandre Gomes
Could we also take into account here the case for anemic domain models, in the sense that a structure to the project could be provided over such objects (moving the domain logic to the use case classes for example) Via an use cases driven structure the project would be tightly integrated with the user flows, another fundamental element very important into attaining a comprehensible and maintainable codebase. (Don't forget the control flow vs task duality here)
4%
Flag icon
Although their use of technology was not exemplary, it was the business logic that over-came them.
4%
Flag icon
Their first release had ossified prematurely into a high-maintenance legacy.
4%
Flag icon
But a poorly chosen separation of developer roles disconnected modeling from implementation, so that the design did not reflect the deep analysis that was going on.
4%
Flag icon
When complexity gets out of hand, developers can no longer understand the software well enough to change or extend it easily and safely.
4%
Flag icon
On the other hand, a good design can create opportunities to exploit those complex features.
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.
4%
Flag icon
When this domain complexity is not handled in the design, it won’t matter that the infrastructural technology is well conceived.
4%
Flag icon
When people learn design techniques, they feel excited by the possibilities. Then the messy realities of a real project descend on them.
4%
Flag icon
They can’t fit the new design ideas with the technology they must use.
4%
Flag icon
Or they don’t know when to let go of a particular design aspect in the interest of time and when to dig in their ...
This highlight has been truncated due to consecutive passage length restrictions.
4%
Flag icon
Extreme Programming recognizes the importance of design decisions, but it strongly resists upfront design.
4%
Flag icon
Instead, it puts an admirable effort into communication and improving the project’s ability to change course rapidly.
4%
Flag icon
And although fear of unanticipated requirements often leads to overengineering, the attempt to avoid overengineering can develop into another fear: a fear of doing any deep design thinking at all.
5%
Flag icon
Valuable models do not emerge immediately; they require a deep understanding of the domain.
5%
Flag icon
That understanding comes from diving in, implementing an initial design based on a probably naive model, and then transforming it again and again.
5%
Flag icon
Each time the team gains insight, the model is transformed to reveal that richer knowledge, and the code is refactored to reflect the deeper model and make ...
This highlight has been truncated due to consecutive passage length restrictions.
5%
Flag icon
Then, once in a while, this onion peeling leads to an opportunity to break through to a much deeper model, attended by ...
This highlight has been truncated due to consecutive passage length restrictions.
5%
Flag icon
Exploration is inherently open-ended, but it does not ...
This highlight has been truncated due to consecutive passage length restrictions.
5%
Flag icon
Part III delves into modeling principles that can guide choices along the way, and techniques ...
This highlight has been truncated due to consecutive passage length restrictions.
6%
Flag icon
A model is a simplification. It is an interpretation of reality that abstracts the aspects relevant to solving the problem at hand and ignores extraneous detail.
6%
Flag icon
An appropriate model makes sense of information and focuses it on a problem.
6%
Flag icon
A domain model is not a particular diagram; it is the idea that the diagram is intended to convey.
6%
Flag icon
It is not just the knowledge in a domain expert’s head; it is a rigorously organized and selective a...
This highlight has been truncated due to consecutive passage length restrictions.
6%
Flag icon
A diagram can represent and communicate a model, as can carefully written code, as...
This highlight has been truncated due to consecutive passage length restrictions.
6%
Flag icon
Domain modeling is not a matter of making as “realistic” a...
This highlight has been truncated due to consecutive passage length restrictions.
6%
Flag icon
It is more like moviemaking, loosely representing reality to a particular purpose. Even a documentary film does not show unedited real life. Just as a moviemaker selects aspects of experience and presents them in an idiosyncratic way to tell a story or make a point, a domain modeler chooses a particular model for its utility.
6%
Flag icon
And because the language is based on the model, our natural linguistic abilities can be turned to refining the model itself.
6%
Flag icon
The binding of model and implementation makes experience with early versions of the software applicable as feedback into the modeling process.
6%
Flag icon
The heart of software is its ability to solve domain-related problems for its user.
6%
Flag icon
All other features, vital though they may be, support this basic purpose.
6%
Flag icon
Instead, the technical talent goes to work on elaborate frameworks, trying to solve domain problems with technology.
6%
Flag icon
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.
7%
Flag icon
To focus our exploration, we limited ourselves, for a while, to studying one particular feature. A “probe simulation” would trace the propagation of a signal to detect likely sites of certain kinds of problems in the design.
7%
Flag icon
wrote a very simple prototype, driven by an automated test framework. I avoided all infrastructure. There was no persistence, and no user interface (UI).
7%
Flag icon
This allowed me to concentrate on the behavior.
7%
Flag icon
I was able to demonstrate a simple probe simulation in ju...
This highlight has been truncated due to consecutive passage length restrictions.
7%
Flag icon
Although it used dummy data and wrote raw text to the console, it was nonetheless doing the actual computation of...
This highlight has been truncated due to consecutive passage length restrictions.
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.
7%
Flag icon
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
And they had concrete feedback from the prototype to evaluate...
This highlight has been truncated due to consecutive passage length restrictions.
7%
Flag icon
As the engineers described new features they needed, I made them walk me through scenarios of how the objects interacted.
« Prev 1 3 4 5