Domain-Driven Design

Domain Driven Design (DDD ) is an approach to the modeling of complex object- oriented software. The modeling of the software is influenced significantly by the reacted Fachlichkeiten the application domain. The term "Domain Driven Design " was coined by Eric Evans in his eponymous book.

Domain Driven Design is not only a technique or method. It is much more a way of thinking and prioritization to improve productivity of software projects in the field of complex professional contexts. Domain Driven Design is based on the following two assumptions:

  • The focus of the software design is on the professionalism and the business logic.
  • The design of complex technical relationships should be based on a model of the application domain, the expert model.

Domain Driven Design is not tied to any particular software development process, but based on agile software development. In particular, it requires iterative software development and close cooperation between developers and subject matter experts.

Description

The purpose of any software is to support the tasks of a given application domain. In order to do this successfully, the software must fit harmoniously to the professionalism of the application domain for which it is intended. Domain - driven design enables this by the software models the basic concepts and elements of the application domain, and their relations.

Here, an outline of the software is provided through a layered architecture. The main focus of Domain Driven Design is on the business logic layer. It is a conscious anemisches compartment model, an anti- pattern that describes a compartment model with no business logic, are avoided. The classes of the compartment model included in Domain Driven Design, both the data and the overall functionality of the reacted professionalism, so the whole business logic.

Ubiquitous language

Domain Driven Design is based on a set of concepts, which in modeling - should be taken into account - but also other activities of software development. The main focus here falls on the introduction of a ubiquitous ( widely used, omnipresent, ubiquitous ) language, which should be used in all areas of software development. A language for the description of professionalism, the elements of the compartment model, the classes and methods etc. It is defined as:

"A language structured around the domain model and used by all team members to connect all the activities of the team with the software. "

" A language that is structured around the application domain, and is used by all team members to associate all activities of the team with the software. "

Domain Driven Design is itself independent of programming languages ​​, tools and frameworks. Nevertheless, there are a number of tools and frameworks that provide support for the implementation of specific DDD Patterns or support the approach of DDD.

Components of the professional model

Domain - driven design distinguishes the following components of the compartment model:

Moreover knows Domain Driven Design, two other components of the professional model - Factories and Repositories. While this itself does not implement professionalism, but are still part of the compartment model since they provide important functionality for the life cycle of domain objects.

The names of these patterns corresponding classes of the business logic layer are part of the ubiquitous language and should be named accordingly. Changing the name of an expert object by refactoring thus corresponds to a change in the professionalism of the application.

Other techniques

Domain - Driven Design describes and recommends a number of other techniques and approaches for the implementation of the trade model:

Architecture techniques

Design techniques

These and other common design techniques of object orientation lead to a declarative style ( declarative style) of the design. Thus, the code is not only shorter, easier to understand and easier to test, but also make it possible to work out the Kernfachlichkeit and thus a concentration on the relevant technical functions of software.

Procedures

It also defines a domain - driven design, a number of procedures which serve to ensure the integrity of the models. This is especially necessary when multiple teams to work together under different management and coordination at various Fachlichkeiten, but in a large project.

The graph shows the dependencies between these and other elements of Domain Driven Design.

Comparison with other approaches and techniques

244602
de