β
The heart of software is its ability to solve domain-related problems for its user.
β
β
Eric Evans (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
It takes fastidiousness to write code that doesnβt just do the right thing but also says the right thing.
β
β
Eric Evans (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
A model is a selectively simplified and consciously structured form of knowledge.
β
β
Eric Evans (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
When you can, choose Value Objects to model integrations. This advice is applicable in many cases when consuming remote Standard Types.
β
β
Vaughn Vernon (Implementing Domain-Driven Design)
β
It is more desirable for Entities to have equals() and hashCode() methods that are based on the objectβs unique identity rather than other attributes.
β
β
Vaughn Vernon (Implementing Domain-Driven Design)
β
The vital detail about the design is captured in the code. A well-written implementation should be transparent, revealing the model underlying it.
β
β
Eric Evans (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
there should be some learning when a domain model is discussed.
β
β
Eric Evans (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
Knowledge crunching is an exploration, and you canβt know where you will end up.
β
β
Eric Evans (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
To communicate effectively, the code must be based on the same language used to write the requirementsβthe same language that the developers speak with each other and with domain experts.
β
β
Eric Evans (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
Developers are too wrapped up with technology and trying to solve problems using technology rather than careful thought and design. This leads developers to constantly chase after new βshiny objects,β which are the latest fads in technology.
β
β
Vaughn Vernon (Domain-Driven Design Distilled)
β
Listen to the language the domain experts use. Are there terms that succinctly state something complicated? Are they correcting your word choice (perhaps diplomatically)? Do the puzzled looks on their faces go away when you use a particular phrase? These are hints of a concept that might benefit the model.
β
β
Eric Evans (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
Developing software that delivers true business value is not the same thing as developing ordinary business software. Software that delivers true business value aligns with the business strategic initiatives and bears solutions with clearly identifiable competitive advantageβsoftware that is not about technology, but about the business.
β
β
Vaughn Vernon (Implementing Domain-Driven Design)
β
One of the patterns from domain-driven design is called bounded context. Bounded contexts are used to set the logical boundaries of a domainβs solution space for better managing complexity. Itβs important that teams understand which aspects, including data, they can change on their own and which are shared dependencies for which they need to coordinate with other teams to avoid breaking things. Setting boundaries helps teams and developers manage the dependencies more efficiently.
The logical boundaries are typically explicit and enforced on areas with clear and higher cohesion. These domain dependencies can sit on different levels, such as specific parts of the application, processes, associated database designs, etc. The bounded context, we can conclude, is polymorphic and can be applied to many different viewpoints. Polymorphic means that the bounded context size and shape can vary based on viewpoint and surroundings. This also means you need to be explicit when using a bounded context; otherwise it remains pretty vague.
β
β
Piethein Strengholt (Data Management at Scale: Best Practices for Enterprise Architecture)
β
outside the boundaries of its own skinβthese things had driven the species to the edge of destruction. Worse, this one organism threatened the survival of all life on Earth. The Silencerβs makers did not have to look far for a solution. The answer lay in another species that had conquered the entirety of its domain, ruling it with unquestioned authority for millions of years. Beyond their immaculate design, the reason sharks rule the ocean is their complete indifference to everything except feeding, procreation, and defending their territory. The shark does not love. It feels no empathy. It trusts nothing. It lives in perfect harmony with its environment because it has no aspirations or desires. And no pity. A shark feels no sorrow, no remorse, hopes for nothing, dreams of nothing, has no illusions about itself or anything beyond itself. Once a human named Evan Walker had a dreamβa dream it can no longer rememberβand in that dream there was a tent in the woods and in that tent there was a girl who called herself humanity, and the girl was worth more to it than its own life. No longer. When it finds her,
β
β
Rick Yancey (The Last Star (The 5th Wave, #3))
β
Each service is meant to represent a domain or subdomain; in many ways, microservices is the physical embodiment of the logical concepts in domain-driven design.
β
β
Mark Richards (Fundamentals of Software Architecture: An Engineering Approach)
β
The complexity of a highly detailed interaction ends up being handled in the application layer, allowing domain knowledge to creep into the application or user interface code, where it is lost from the domain layer.
β
β
Eric Evans (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
Supple design has a profound effect on the ability of software to cope with change and complexity.
β
β
Eric Evans (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
If the implementer has state that is used in the computation, then the implementer is effectively an argument of the operation,
β
β
Eric Evans (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
Across this linguistic divide, the domain experts vaguely describe what they want. Developers, struggling to understand a domain new to them, vaguely understand. A few members of the team manage to become bilingual, but they become bottlenecks of information flow, and their translations are inexact.
β
β
Evans Eric (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
It takes fastidiousness to write code that doesnβt just do the right thing but also says the right thing.
β
β
Evans Eric (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
Try to completely eliminate bidirectional associations between VALUE OBJECTS. If in the end such associations seem necessary in your model, rethink the decision to declare the object a VALUE OBJECT in the first place. Maybe it has an identity that hasnβt been explicitly recognized yet.
β
β
Evans Eric (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
A good SERVICE has three characteristics. 1. The operation relates to a domain concept that is not a natural part of an ENTITY or VALUE OBJECT. 2. The interface is defined in terms of other elements of the domain model. 3. The operation is stateless.
β
β
Evans Eric (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
fine-grained objects can lead to inefficient messaging in a distributed system.
β
β
Evans Eric (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
Unless there is a real intention to distribute code on different servers, keep all the code that implements a single conceptual object in the same MODULE, if not the same object.
β
β
Evans Eric (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
frameworks can easily get in the way, either by making too many assumptions that constrain domain design choices or by making the implementation so heavyweight that development slows
β
β
Evans Eric (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
Isolating the domain implementation is a prerequisite for domain-driven design.
β
β
Evans Eric (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
Although the REPOSITORY will insert into and delete from the database, it will ordinarily not commit anything. It is tempting to commit after saving, for example, but the client presumably has the context to correctly initiate and commit units of work. Transaction management will be simpler if the REPOSITORY keeps its hands off.
β
β
Evans Eric (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
One other case that drives people to combine FACTORY and REPOSITORY is the desire for βfind or createβ functionality, in which a client can describe an object it wants and, if no such object is found, will be given a newly created one. This function should be avoided. It is a minor convenience at best. A lot of cases in which it seems useful go away when ENTITIES and VALUE OBJECTS are distinguished. A client that wants a VALUE OBJECT can go straight to a FACTORY and ask for a new one. Usually, the distinction between a new object and an existing object is important in the domain, and a framework that transparently combines them will actually muddle the situation.
β
β
Evans Eric (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
Executives and business experts should read this book so that they can articulate their vision and the core concepts that justify the need for the solution. Techniques will allow them to do this in an expedient manner and also gain empathy toward what it takes to implement changes quickly and reliably.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
Consistent use of the common, ubiquitous language helps reinforce a shared understanding and produce solutions that better reflect the mental model of the domain experts.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
Aggregates are also referred to as aggregate roots, that is, the object that is at the root of the entity hierarchy. We use these terms synonymously in this book.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
The singular purpose of this repository is to load a single instance of an aggregate using its identifier. It is important to note that this repository does not support finding aggregate instances using any other means.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
There seems to exist a lot of confusion between the terms subdomains and bounded contexts. What is the difference? It turns out that subdomains are problem space concepts, whereas bounded contexts are solution space concepts.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
It is common to collectively refer to entities and value objects as domain objects.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
Fundamentally, an aggregate has the following qualities: Is an entity usually composed of other child entities and value objects Encapsulates access to child entities by exposing behavior (usually referred to as commands) Is a boundary that is used to enforce business invariants (rules) consistently Is an entry point to get things done within a bounded context
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
It may be prudent to make use of domain events to reduce the amount of coupling between bounded contexts, making it a critical building block of DDD.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
Transactional outbox: None of the preceding methods are completely foolproof in the sense that there still exists a window of opportunity where the database and the event bus can become inconsistent (this is true even with two-phase commits). One way to circumvent this problem is by completely eliminating the dual-write problem. In this solution, the command processor writes to its database and the intended event to an outbox table in a local transaction. A separate poller component polls the outbox table and writes to the event bus. Polling can be computationally intensive and could lead back to the dual write problem again because the poller has to keep track of the last written event.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
Partnership relationships between teams can lead to a situation where individual team responsibilities become very unclear,
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
Jack Reeves in his 1992 C++ Journal article What is Software Design,
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
are those aspects of the system that do not affect functionality directly but have a profound effect on the efficacy of those using and maintaining these systems.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
they almost always expect these features to be part of any system they use.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
We cannot solve our problems with the same level of thinking that created them. β Albert Einstein
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
evolve mature software solutions that will stand the test of time.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
It may be necessary to further break down subdomains where the subdomain is still too complex.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
The rationale here is that as you move up the pyramid, the cost of upkeep goes up copiously while the speed of execution slows down manifold.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
Under the right circumstances, this can accelerate the growth of a business considerably while allowing the owner to retain ownership, reduced taxes, and lower interest rates.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
Financial debt is the act of borrowing money from an outside party to quickly finance the operations of a businessβwith the promise to repay the principal plus the agreed-upon rate of interest in a timely manner. Under the right circumstances, this can accelerate the growth of a business considerably while allowing the owner to retain ownership, reduced taxes, and lower interest rates. On the other hand, the inability to pay back this debt on time can adversely affect credit rating, result in higher interest rates, cash flow difficulties, and other restrictions.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
From that perspective, solutions that apply DDD naturally tend to be layered as well.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
Some amount of redundancy in the layering may be unavoidable for the purposes of standardization.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
In the layer cake anti-pattern, each layer merely proxies the call to the layer beneath it without adding any value.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
Another variation of the layer cake we see commonly is one where layers refuse to share input and output types in the name of higher isolation and looser coupling.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
If the objects being translated are more or less structurally identical, we have an anemic translation.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
While such translations may be necessary across bounded contexts, teams should strive to avoid the need for variations in names and structures of the same concept within a single bounded context. The intentional use of ubiquitous language helps avoid such scenarios.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
In such scenarios, it may be worth considering consciously allowing one or more layers to be bypassed.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
is possible for aggregates to contain child aggregates.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
Creating a business model canvas can prove challenging if you do not have an existing product already, which is usually true in the case of start-ups or existing enterprises expanding into new business areas. In such cases, a variation in the form of the lean canvas is worth exploring.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
In order to make the canvas actionable, the idea is to capture items that were most uncertain and/or risky.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
Both the business model canvas and the lean canvas provide a high-level view of the business model, the high-priority problems, and the potential solutions.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
An impact map is a visualization and strategic planning tool that enables you to understand scope and underlying assumptions. It was created collaboratively by senior technical and business people in the form of a mind map
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
Impact mapping provides an easy-to-understand visual representation of the relationship between the goals, users, and impacts on the deliverables.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
Axon Framework,
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
Leaking of domain logic: In an ideal world, the aggregate will remain the custodian of all domain logic. Given that the orchestrator is also stateful, business logic may inadvertently shift to the orchestrator. Care should be taken to ensure that the orchestrator only has flow control logic while business invariants remain within the confines of the aggregate.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
It also helps if these teams are co-located and/or have a significant working time overlap.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
From a consumerβs perspective, the robustness principle (Postelβs law) applies: be conservative in what you send, be liberal in what you accept.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
CAP theorem. The theorem postulates that distributed systems can either be highly available or consistent in the event of a network partition, not both at the same time. Given the three characteristics, consistency, availability, and partition tolerance, the theorem postulates that distributed systems can either be highly available or consistent in the event of a network partition, not both at the same time.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
An AGGREGATE is a cluster of associated objects that we treat as a unit for the purpose of data changes.
β
β
Eric Evans (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
Just as YouTube started with manual curation, most networked products can start with manual efforts. This means exercising editorial judgment, or allowing users to curate content themselves. The App Store has millions of apps, so when Apple releases a list of βApps of the Yearβ in the App Store, it aids discovery for consumers but also inspires app developers to invest in the design and quality of their products. Or platforms can leverage user-generated content, where content is organized by the ever-popular hashtagβone example is Amazonβs wish lists, which are driven primarily by users without editors. Similarly, using implicit dataβwhether thatβs attributes of the content or grouping the originator by their company or college email domain nameβcan bring people together with data from the network. Twitter uses a hybrid approachβthe team analyzes activity on the network to identify trending events, which are then editorialized into stories.
β
β
Andrew Chen (The Cold Start Problem: How to Start and Scale Network Effects)
β
DDD isnβt first and foremost about technology. In its most central principles, DDD is about discussion, listening, understanding, discovery, and business value, all in an effort to centralize knowledge.
β
β
Vaughn Vernon (Implementing Domain-Driven Design)
β
youβd learn which buttons did what, so that you could give one another instructions. βPress the red button near the flashing
β
β
Harry Percival (Architecture Patterns with Python: Enabling Test-Driven Development, Domain-Driven Design, and Event-Driven Microservices)
β
We have a microservice with a web API,
β
β
Harry Percival (Architecture Patterns with Python: Enabling Test-Driven Development, Domain-Driven Design, and Event-Driven Microservices)
β
Software design is a constant battle with complexity. We must make distinctions so that special handling is applied only where necessary.
β
β
Eric Evans (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
However, without some level of governance, this may quickly devolve into a big ball of mud, with layering decisions being made seemingly arbitrarily, based on personal preferences and experiences (or lack thereof).
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
In the clamoring industry scene of Myanmar, opening learning experiences and molding achievement depends on grasping the market elements. Statistical surveying assumes a urgent part in directing organizations towards informed choices and key headways. How about we dive into the domain of best market research companies in Myanmar and investigate the top organizations that are preparing for industry greatness!
best market research companies in Myanmar -amtmarketresearch We assist our clients with opening learning experiences and shape
With regards to exploring the perplexing business sector scene of Myanmar, one organization stands apart for its excellent ability in statistical surveying - amtmarketresearch. With a mission to assist clients with opening learning experiences and shape their prosperity direction, this unique firm blows away in conveying noteworthy bits of knowledge.
amtmarketresearch brags a group prepared specialists who are knowledgeable in the subtleties of the Myanmar market. Their fitted way to deal with research guarantees that clients get custom tailored techniques that line up with their interesting objectives and difficulties. By utilizing state of the art procedures and industry mastery, they engage organizations to pursue informed choices that drive unmistakable outcomes.
In a serious commercial center like Myanmar, having a believed accomplice like amtmarketresearch can have a significant effect. Their devotion to greatness and obligation to client achievement put them aside as one of the most mind-blowing statistical surveying organizations in the country.
Prologue to Statistical surveying in Myanmar
Myanmar, a country wealthy in culture and history, is likewise a place that is known for arising potential open doors for organizations. As the market scene advances quickly, understanding shopper conduct and industry patterns becomes urgent for progress. This is where statistical surveying assumes an essential part.
best market research companies in Myanmar includes assembling and examining information to reveal experiences that drive informed direction. By digging into socioeconomics, inclinations, and buying designs, organizations can fit their methodologies to actually address the issues of the nearby market.
From conventional overviews to creative advanced devices, statistical surveying procedures keep on developing in Myanmar. Organizations are utilizing innovation to contact more extensive crowds and accumulate continuous input on items and administrations.
In this powerful climate, remaining in front of the opposition requires a profound comprehension of the nearby subtleties and elements forming shopper conduct. Statistical surveying fills in as a compass directing organizations towards development and maintainability in Myanmar's energetic commercial center.
Significance of Statistical surveying for Organizations in Myanmar
Statistical surveying holds massive significance for organizations in Myanmar. It goes about as a directing light, enlightening the way towards outcome in the powerful market scene of this Southeast Asian country. By leading careful statistical surveying, organizations can acquire important experiences into buyer inclinations, contest investigation, and arising patterns.
Understanding the requirements and needs of the neighborhood populace is critical for fitting items or administrations that reverberate with Myanmar's different segment portions. Statistical surveying assists organizations with pursuing informed choices in view of information driven proof as opposed to suppositions or mystery.
In a quickly developing business sector like Myanmar, remaining in front of contenders requires constant checking and examination of industry patterns. Statistical surveying empowers organizations to adjust rapidly to changing economic situations and jump all over chances before their rivals do.
In addition, putting resources i
β
β
best market research companies in Myanmar
β
we are opposed to creating additional tiers merely as a means to compensate for poorly factored core domain APIs.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
when coupled with data-binding constructs, makes for code that is much more readable, maintainable, and testable.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
Important Note This may feel contrary to the notion of centralizing business validations on the backend. While this may be a noble attempt at implementing the Donβt Repeat Yourself (DRY) principle, in reality, it poses a lot of practical problems. Distributed systems expert Udi Dahan has a very interesting take on why this may not be such a virtuous thing to pursue. Ted Neward also talks about this in his blog, entitled The Fallacies of Enterprise Computing.
β
β
Premanand Chandrasekaran (Domain-Driven Design with Java - A Practitioner's Guide: Create simple, elegant, and valuable software solutions for complex business problems)
β
As Fred Brooks laid out in his widely popular paper, βNo Silver BulletβEssence and Accident in Software Engineeringβ, there are two types of complexity when building software systems. First, we have the essential complexity that is essential and inherent to the problem space. This is business and domain complexity. Second, there is accidental complexity: the complexity that weβengineers, architects, and designersβcreate in our solutions. Accidental complexity can and should be reduced.
β
β
Zhamak Dehghani (Data Mesh: Delivering Data-Driven Value at Scale)
β
all approaches are fine as long as they maintain the isolation of the domain layer, allowing domain objects to be designed without simultaneously thinking about the user interface that might interact with them.
β
β
Evans Eric (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
Developing a good domain model is an art. But the practical design and implementation of a modelβs individual elements can be relatively systematic.
β
β
Evans Eric (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
If the available tool does not facilitate that expressiveness, reconsider the choice of tools. An unexpressive implementation negates the advantage of the extra paradigm.
β
β
Evans Eric (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
these ad hoc solutions divert attention away from the model, and soon you are back to hacking and hoping.
β
β
Evans Eric (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
software development is a learning process; working code is a side effect. A software projectβs success depends on the effectiveness of knowledge sharing between domain experts and software engineers. We have to understand the problem in order to solve it.
β
β
Vladik Khononov (Learning Domain-Driven Design: Aligning Software Architecture and Business Strategy)
β
It seems to me that Scrum and other agile techniques are being used as substitutes for careful modeling, where a product backlog is thrust at developers as if it serves as a set of designs. Most agile practitioners will leave their daily stand-up without giving a second thought to how their backlog tasks will affect the underlying model of the business. Although I assume this is needless to say, I must assert that Scrum, for example, was never meant to stand in place of design. No matter how many project and product managers would like to keep you marching on a relentless path of continuous delivery, Scrum was not meant only as a means to keep Gantt chart enthusiasts happy. Yet, it has become that in so many cases.
β
β
Vaughn Vernon (Implementing Domain-Driven Design)
β
One of the worst disconnects of a business software development effort is seen in the gap between domain experts and software developers. Generally speaking, true domain experts are focused on delivering business value. On the other hand, software developers are typically drawn to technology and technical solutions to business problems. Itβs not that software developers have wrong motivations; itβs just what tends to grab their attention. Even when software developers engage with domain experts, the collaboration is largely at a surface level, and the software that gets developed often results in a translation/mapping between how the business thinks and operates and how the software developer interprets that. The resulting software generally does not reflect a recognizable realization of the mental model of the domain experts, or perhaps it does so only partially. Over time this disconnect becomes costly. The translation of domain knowledge into software is lost as developers transition to other projects or leave the company. A different, yet related problem is when one or more domain experts do not agree with each other. This tends to happen because each expert has more or less experience in the specific domain being modeled, or they are simply experts in related but different areas. Itβs also common for multiple βdomain expertsβ to have no expertise in a given domain, where they are more of a business analyst, yet they are expected to bring insightful direction to discussions. When this situation goes unchecked, it results in blurred rather than crisp mental models, which lead to conflicting software models. Worse still is when the technical approach to software development actually wrongly changes the way the business functions. While a different scenario, it is well known that enterprise resource planning (ERP) software will often change the overall business operations of an organization to fit the way the ERP functions. The total cost of owning the ERP cannot be fully calculated in terms of license and maintenance fees. The reorganization and disruption to the business can be far more costly than either of those two tangible factors. A similar dynamic is at play as your software development teams interpret what the business needs into what the newly developed software actually does. This can be both costly and disruptive to the business, its customers, and its partners. Furthermore, this technical interpretation is both unnecessary and avoidable with the use of proven software development techniques. The solution is a key investment.
β
β
Vaughn Vernon (Implementing Domain-Driven Design)
β
Most talented developers do not have much interest in learning about the specific domain in which they are working, much less making a major commitment to expand their domain-modeling skills. Technical people enjoy quantifiable problems that exercise their technical skills.
β
β
Eric Evans (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
Simple, informal UML diagrams can anchor a discussion.
β
β
Eric Evans (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
Any technical person contributing to the model must spend some time touching the code, whatever primary role he or she plays
on the project. Anyone responsible for changing code must learn to express a model through the code. Every developer must be involved in some level of discussion about the model and have contact with domain experts. Those who contribute in different ways must consciously engage those who touch the code in a dynamic exchange of model ideas through the UBIQUITOUS LANGUAGE
β
β
Eric Evans (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
But, while bidirectional associations between ENTITIES may be hard to maintain, bidirectional associations between two VALUE OBJECTS just make no sense. Without identity, it is meaningless to say that an object points back to the same VALUE OBJECT that points to it. The most you could say is that it points to an object that is equal to the one pointing to it, but you would have to enforce that invariant somewhere.
β
β
Eric Evans (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
When a significant process or transformation in the domain is not a natural responsibility of an ENTITY or VALUE OBJECT, add an operation to the model as a standalone interface declared as a SERVICE. Define the interface in terms of the language of the model and make sure the operation name is part of the UBIQUITOUS LAN- GUAGE. Make the SERVICE stateless.
β
β
Eric Evans (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
Bounded Context is a specific solution, a realization view,
β
β
Vaughn Vernon (Implementing Domain-Driven Design)
β
This makes Subdomains a very useful tool in assessing the problem space.
β
β
Vaughn Vernon (Implementing Domain-Driven Design)
Vaughn Vernon (Implementing Domain-Driven Design)
β
Architecture is important, but architectural influences come and go. Remember to prioritize correctly, placing more emphasis on the domain model, which has greater business value and will be more enduring.
β
β
Vaughn Vernon (Implementing Domain-Driven Design)
β
When Events are delivered to interested parties, in either local or foreign systems, they are generally used to facilitate eventual consistency.
β
β
Vaughn Vernon (Implementing Domain-Driven Design)
β
Prefer references to external Aggregates only by their globally unique identity, not by holding a direct object reference (or βpointerβ).
β
β
Vaughn Vernon (Implementing Domain-Driven Design)
β
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.
β
β
Eric Evans (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
the model is not the diagram.
β
β
Eric Evans (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
The behavior of running code is unambiguous.
β
β
Eric Evans (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
documenting exclusively through code has some of the same basic problems as using comprehensive UML diagrams.
β
β
Eric Evans (Domain-Driven Design: Tackling Complexity in the Heart of Software)
β
A document shouldnβt try to do what the code already does well.
β
β
Eric Evans (Domain-Driven Design: Tackling Complexity in the Heart of Software)