Technopedia Center
PMB University Brochure
Faculty of Engineering and Computer Science
S1 Informatics S1 Information Systems S1 Information Technology S1 Computer Engineering S1 Electrical Engineering S1 Civil Engineering

faculty of Economics and Business
S1 Management S1 Accountancy

Faculty of Letters and Educational Sciences
S1 English literature S1 English language education S1 Mathematics education S1 Sports Education
  • Registerasi
  • Brosur UTI
  • Kip Scholarship Information
  • Performance
  1. WeltenzyklopÀdie
  2. Domain-driven Design
Domain-driven Design 👆 Click Here!
aus Wikipedia, der freien EnzyklopÀdie

Domain-driven Design (DDD) ist eine Herangehensweise an die Modellierung komplexer Software. Die Modellierung der Software wird dabei maßgeblich von den umzusetzenden Fachlichkeiten der AnwendungsdomĂ€ne beeinflusst. Der Begriff „Domain-driven Design“ wurde 2003 von Eric Evans in seinem gleichnamigen Buch geprĂ€gt.[1]

Beschreibung

[Bearbeiten | Quelltext bearbeiten]

Domain-driven Design ist nicht nur eine Technik oder Methode. Es ist vielmehr eine Denkweise und Priorisierung zur Steigerung der ProduktivitÀt von Softwareprojekten im Umfeld komplexer fachlicher ZusammenhÀnge.[2] Domain-driven Design basiert auf folgenden zwei Annahmen:

  • Der Schwerpunkt des Softwaredesigns liegt auf der Fachlichkeit und der Fachlogik.
  • Der Entwurf komplexer fachlicher ZusammenhĂ€nge sollte auf einem Modell der AnwendungsdomĂ€ne, dem DomĂ€nenmodell, basieren.

Domain-driven Design ist an keinen bestimmten Softwareentwicklungsprozess gebunden, orientiert sich aber an agiler Softwareentwicklung. Insbesondere setzt es iterative Softwareentwicklung und eine enge Zusammenarbeit zwischen Entwicklern und Fachexperten voraus.[3]

Schichtenarchitektur

Der Sinn jeder Software ist es, die Aufgabenstellungen einer bestimmten AnwendungsdomĂ€ne zu unterstĂŒtzen. Um dies erfolgreich leisten zu können, muss die Software zur Fachlichkeit der AnwendungsdomĂ€ne passen, fĂŒr die sie bestimmt ist. Domain-driven Design ermöglicht dies, indem die Software grundlegende Konzepte und Elemente der AnwendungsdomĂ€ne sowie deren Beziehungen modelliert.[4]

Die Architektur ist geprÀgt durch die Existenz einer expliziten GeschÀftslogikschicht. Diese Schicht soll die DomÀnen-Klassen von anderen Funktionen des Systems entkoppeln und möglichst leicht erkennbar machen. Verschiedene Architekturstile können eingesetzt werden, um die GeschÀftslogikschicht einzubetten. Dazu zÀhlen die Schichtenarchitektur und die hexagonale Architektur.[5][6]

Die Klassen des DomÀnenmodells enthalten im Domain-driven Design sowohl die Daten als auch die gesamte FunktionalitÀt der umzusetzenden Fachlichkeit, also die gesamte Fachlogik. Reine Datenklassen nur mit Zugriffsmethoden aber ohne fachliche FunktionalitÀt gelten als Code-Smell. Ein auf Datenklassen aufbauendes DomÀnenmodell wird anÀmisch genannt und gilt demzufolge als Antipattern, da es ein DomÀnenmodell ohne Fachlogik beschreibt.[7]

Domain-driven Design steht in Kontrast zum weniger komplexen Entwicklungsmuster Smart UI. Bei Anwendung von Smart UI wird die Anwendungslogik direkt in die BenutzeroberflĂ€che integriert. Dadurch kann keine dezidierte Schicht fĂŒr Anwendungslogik entstehen, die von verschiedenen Komponenten wieder verwendet werden kann.[1]

UbiquitÀre Sprache

[Bearbeiten | Quelltext bearbeiten]

Domain-driven Design basiert auf einer Reihe von Konzepten, welche bei der Modellierung – aber auch anderen TĂ€tigkeiten der Softwareentwicklung – berĂŒcksichtigt werden sollten. Das Hauptaugenmerk hierbei fĂ€llt auf die EinfĂŒhrung einer ubiquitĂ€ren (allgemein verwendeten, allgegenwĂ€rtigen, ubiquitous) Sprache, welche in allen Bereichen der Softwareerstellung verwendet werden sollte. Eine Sprache fĂŒr die Beschreibung der Fachlichkeit, der Elemente des DomĂ€nenmodells, der Klassen und Methoden etc. Sie wird definiert als:

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

„Eine Sprache, welche um die AnwendungsdomĂ€ne strukturiert ist, und von allen Teammitgliedern verwendet wird, um alle AktivitĂ€ten des Teams mit der Software zu verknĂŒpfen.“

– Eric Evans: PrĂ€sentationsunterlagen seines Vortrages vom 6. November 2007 auf der JAOO[8]

Domain-driven Design ist selbst unabhĂ€ngig von Programmiersprachen, Werkzeugen und Frameworks. Dennoch gibt es eine Reihe von Werkzeugen, Frameworks, LeitfĂ€den und Vorgehensmodellen, die UnterstĂŒtzung fĂŒr die Realisierung spezifischer DDD-Patterns anbieten oder die Herangehensweise von DDD organisieren.[9][10][11]

Bestandteile des DomÀnenmodells

[Bearbeiten | Quelltext bearbeiten]
DomÀnenmodell

Domain-driven Design unterscheidet die folgenden Bestandteile des DomÀnenmodells:

EntitÀten (Entities, reference objects)
Objekte des Modells, welche nicht durch ihre Eigenschaften, sondern durch ihre IdentitÀt definiert werden. Beispielsweise wird eine Person meist als EntitÀt abgebildet. Eine Person bleibt somit dieselbe Person, wenn sich ihre Eigenschaften Àndern; und sie unterscheidet sich von einer anderen Person, auch wenn diese dieselben Eigenschaften hat. EntitÀten werden oft mit Hilfe von eindeutigen Identifikatoren modelliert.
Wertobjekte (value objects)
Objekte des Modelles, welche keine konzeptionelle IdentitĂ€t haben oder benötigen und somit allein durch ihre Eigenschaften definiert werden. Wertobjekte werden ĂŒblicherweise als unverĂ€nderliche Objekte (immutable objects) modelliert, damit sind sie wiederverwendbar (vgl. Flyweight) und verteilbar.
Aggregate (aggregates)
Aggregate sind Zusammenfassungen von EntitĂ€ten und Wertobjekten und deren Assoziationen untereinander zu einer gemeinsamen transaktionalen Einheit. Aggregate definieren genau eine EntitĂ€t als einzigen Zugriff auf das gesamte Aggregat. Alle anderen EntitĂ€ten und Wertobjekte dĂŒrfen von außerhalb nicht statisch referenziert werden. Damit wird garantiert, dass alle Invarianten des Aggregats und der einzelnen Bestandteile des Aggregats sichergestellt werden können.
Assoziationen (associations)
Assoziationen sind, wie bei UML definiert, Beziehungen zwischen zwei oder mehr Objekten des DomÀnenmodells. Hier werden nicht nur statische, durch Referenzen definierte Beziehungen betrachtet, sondern auch dynamische Beziehungen, die beispielsweise erst durch die Abarbeitung von SQL-Abfragen entstehen.
Serviceobjekte (services)
Bei Domain-driven Design werden FunktionalitĂ€ten, welche ein wichtiges Konzept der Fachlichkeit darstellen und konzeptionell zu mehreren Objekten des DomĂ€nenmodells gehören, als eigenstĂ€ndige Serviceobjekte modelliert. Serviceobjekte sind ĂŒblicherweise zustandslose (engl. stateless) und daher wiederverwendbare Klassen ohne Assoziationen, mit Methoden, die den angebotenen FunktionalitĂ€ten entsprechen. Diese Methoden bekommen die Wertobjekte und EntitĂ€ten ĂŒbergeben, die zur Abarbeitung der FunktionalitĂ€t notwendig sind.
Fachliche Ereignisse (domain events)
Fachliche Ereignisse sind Objekte, welche komplexe, sich unter UmstĂ€nden dynamisch Ă€ndernde, Aktionen des DomĂ€nenmodells beschreiben, die ein oder mehrere Aktionen oder Änderungen in den Fachobjekten bewirken. Fachliche Ereignisse ermöglichen auch die Modellierung verteilter Systeme. Die einzelnen Subsysteme kommunizieren ausschließlich ĂŒber fachliche Ereignisse, damit werden sie stark entkoppelt und das gesamte System somit wartbarer und skalierbarer.[12]
Module (modules, packages)
Module teilen das DomÀnenmodell in fachliche (nicht technische) Bestandteile. Sie sind gekennzeichnet durch starke innere KohÀsion und geringe Kopplung zwischen den Modulen.

DarĂŒber hinaus kennt Domain-driven Design noch zwei weitere Bestandteile des DomĂ€nenmodells – Factories und Repositorys. Diese implementieren zwar selbst nicht Fachlichkeit, sind aber dennoch Bestandteil des DomĂ€nenmodells, da sie fĂŒr den Lebenszyklus der Fachobjekte wichtige FunktionalitĂ€t bereitstellen.

Fabriken (factories)
Fabriken dienen dazu, die Erzeugung von Fachobjekten in spezielle Fabrik-Objekte auszulagern. Dies ist sinnvoll, wenn entweder die Erzeugung komplex ist (und beispielsweise Assoziationen benötigt, die das Fachobjekt selbst nicht mehr benötigt) oder die spezifische Erzeugung der Fachobjekte zur Laufzeit ausgetauscht werden können soll. Fabriken werden ĂŒblicherweise durch erzeugende Entwurfsmuster wie abstrakte Fabrik, Fabrikmethode oder Erbauer umgesetzt.
Repositorys
Repositorys abstrahieren die Persistierung und Suche von Fachobjekten. Mittels Repositorys werden die technische Infrastruktur sowie alle Zugriffsmechanismen auf diese von der GeschĂ€ftslogikschicht getrennt. FĂŒr alle Fachobjekte, welche ĂŒber die Infrastruktur-Schicht geladen werden, wird eine Repository-Klasse bereitgestellt, welche die verwendeten Lade- und Suchtechnologien nach außen abkapselt. Die Repositorys selbst sind Teil des DomĂ€nenmodells und somit Teil der GeschĂ€ftslogikschicht. Sie greifen als einzige auf die Objekte der Infrastruktur-Schicht zu, welche meist mittels der Entwurfsmuster Data Access Objects, Query Objects oder Metadata Mapping Layers umgesetzt werden.

Die Namen der diesen Mustern entsprechenden Klassen der GeschĂ€ftslogikschicht sind Teile der ubiquitĂ€ren Sprache und sollten entsprechend benannt werden. Eine Änderung des Namens eines Fachobjektes durch Refactoring entspricht somit einer Änderung der Fachlichkeit der Applikation.

Weitere Techniken

[Bearbeiten | Quelltext bearbeiten]

Domain-driven Design beschreibt und empfiehlt eine Reihe weiterer Techniken und Herangehensweisen fĂŒr die Umsetzung des DomĂ€nenmodells:

Architekturtechniken

[Bearbeiten | Quelltext bearbeiten]
Evolvierende Struktur (evolving order)
geht davon aus, dass große Strukturen im DomĂ€nenmodell idealerweise erst mit der Zeit entstehen beziehungsweise sich ĂŒber die Zeit entwickeln. Große Strukturen sollten möglichst einfach und mit möglichst wenigen Ausnahmen umgesetzt sein.
Systemmetapher (system metaphor)
ist ein Konzept aus Extreme Programming, welche die Kommunikation zwischen allen Beteiligten erleichtert, indem es das System mittels einer Metapher, einer inhaltlich Ă€hnlichen, fĂŒr alle Seiten verstĂ€ndlichen Alltagsgeschichte beschreibt. Diese sollte möglichst gut passen und zur StĂ€rkung der ubiquitĂ€ren Sprache verwendet werden.
Verantwortlichkeitsschichten (responsibility layers)
ist die Aufteilung des DomĂ€nenmodells in Schichten gemĂ€ĂŸ Verantwortlichkeiten. Domain-driven Design schlĂ€gt folgende Schichten vor: Entscheidungsschicht, Regelschicht, Zusagen, ArbeitsablĂ€ufe, Potential.
Wissenslevel (knowledge level)
beschreibt das explizite Wissen ĂŒber das DomĂ€nenmodell. Es ist in Situationen notwendig, wo die AbhĂ€ngigkeiten und Rollen zwischen den EntitĂ€ten situationsbedingt variieren. Das Wissenslevel sollte diese AbhĂ€ngigkeiten und Rollen von außen anpassbar enthalten, damit das DomĂ€nenmodell weiterhin konkret und ohne unnötige AbhĂ€ngigkeiten bleiben kann.
Erweiterungsframeworks (pluggable component framework)
ist die Überlegung, verschiedene Systeme ĂŒber ein Komponentenframework miteinander zu verbinden.

Designtechniken

[Bearbeiten | Quelltext bearbeiten]
Intentionen beschreibende Schnittstellen (intention-revealing interfaces)
bezeichnen Schnittstellen von Klassen und Komponenten, welche es den Entwicklern ermöglichen, ebendiese zu verwenden, ohne deren Sourcecode studieren zu mĂŒssen. Damit wird sowohl bei Verwendung als auch bei der Wartung dieser Klassen und Komponenten sichergestellt, dass diese gemĂ€ĂŸ deren Intentionen erfolgt.
Nebeneffektfreie Funktionen (side-effect-free functions)
sind Methoden, welche keinen Einfluss auf den Zustand eines Moduls haben. Diese sind einfacher zu testen und sollten somit bevorzugt werden. Sie sollten daher den Großteil der Applikationslogik enthalten. Den Zustand verĂ€ndernde Methoden – sogenannte command Methoden – sollten von ihnen getrennt werden, möglichst einfach gehalten werden und keine Klassen des DomĂ€nenmodells retournieren.
Assertions
dienen im Domain-driven Design dazu, Nebeneffekte von aufgerufenen Methoden sichtbar zu machen, ohne deren Sourcecode studieren zu mĂŒssen. Diese – dem Design by contract nahe – Vorgangsweise fĂŒhrt dazu, dass Entwickler die Auswirkungen der verwendeten Methoden verstehen können, und somit erst Datenkapselung richtig eingesetzt werden kann.
EigenstÀndige Klassen (standalone classes)
sind Klassen, welche keine expliziten oder impliziten AbhÀngigkeiten zu anderen Klassen haben. Sie sind einfacher zu verstehen und sollten somit durch Eliminierung aller unnötigen AbhÀngigkeiten angestrebt werden.
Konzeptionelle Konturen (conceptual contours)
beschreibt die Konzepte, welche der Struktur eines Designs zugrunde liegen. Diese sollten durch sukzessive Refactorings an die stabilen Aspekte der Fachlichkeit angepasst werden. Damit steigt die Wahrscheinlichkeit, dass zukĂŒnftige Änderungen mit dem bestehenden Design leichter umgesetzt werden können.
FunktionsabschlĂŒsse (closure of operations)
sind beim Domain-driven Design Methoden, deren RĂŒckgabetyp derselbe ist wie derjenige ihrer Argumente oder der in der Methode verwendeten Attribute. Diese Methoden erweitern zwar die Möglichkeiten einer Klasse, fĂŒhren aber keine AbhĂ€ngigkeiten auf andere Konzepte ein. Sie sind daher gegenĂŒber Methoden vorzuziehen, deren RĂŒckgabe andere Typen einfĂŒhren.
Antikorruptionsschicht (anticorruption layer)
ist eine architekturelle Schicht, welche das DomĂ€nenmodell von anderen Modellen trennt. Selbst ein Teil des DomĂ€nenmodells, ermöglicht es die Antikorruptionsschicht, dass auf das fremde Modell so zugegriffen werden kann wie das eigene DomĂ€nenmodell es benötigt. Dabei werden die eigenen Konzepte und Sprachelemente auf die des fremden Modells ĂŒbersetzt, das eigene DomĂ€nenmodell wird nicht durch das fremde Modell beeinflusst. Dies wird zumeist mit den Entwurfsmustern Fassade, Adapter und Transferobjekt implementiert.

Diese und weitere gĂ€ngige Designtechniken der Objektorientierung fĂŒhren zu einem deklarativen Stil (declarative style) des Designs. Damit wird der Code nicht nur kĂŒrzer, leichter zu verstehen und einfacher zu testen, sondern sie ermöglichen es auch, die Kernfachlichkeit herauszuarbeiten und sich somit auf die relevanten fachlichen Funktionen einer Software zu konzentrieren.

Vorgehensweisen

[Bearbeiten | Quelltext bearbeiten]

DarĂŒber hinaus definiert Domain-driven Design eine Reihe von Vorgehensweisen, welche dazu dienen, die IntegritĂ€t der Modelle zu gewĂ€hrleisten. Dies ist insbesondere dann notwendig, wenn mehrere Teams unter unterschiedlichem Management und Koordination an verschiedenen Fachlichkeiten, aber in einem großen Projekt zusammenarbeiten sollen.[13]

Die Grafik zeigt die AbhÀngigkeiten zwischen diesen und anderen Elementen von Domain-driven Design.

Vorgehensweisen
Vision der Fachlichkeit (domain vision statement)
ist eine kurze Beschreibung der hinter der Kernfachlichkeit stehenden Vision und der damit verbundenen Ziele. Sie gibt die Entwicklungsrichtung des DomÀnenmodells vor und dient als Bindeglied zwischen Projektvision/Systemmetapher und den Details der Kernfachlichkeit und des Codes.
KontextĂŒbersicht (context map)
dient einer gesamthaften Übersicht ĂŒber alle Modelle, deren Grenzen und Schnittstellen. Dadurch wachsen die Kontexte nicht in Bereiche anderer Kontexte, und die Kommunikation zwischen den Kontexten lĂ€uft ĂŒber wohldefinierte Schnittstellen.
Kontextgrenzen (bounded context)
beschreiben die Grenzen jedes Kontexts in vielfĂ€ltiger Hinsicht wie beispielsweise Teamzuordnung, Verwendungszweck, dahinter liegende Datenbankschemata. Damit wird klar, wo ein Kontext seine GĂŒltigkeit verliert und potentiell ein anderer Kontext seinen Platz einnimmt.
Kernfachlichkeit (core domain)
ist der wertvollste Teil des DomĂ€nenmodells, der Teil, welcher am meisten Anwendernutzen stiftet. Die anderen Teile des DomĂ€nenmodells dienen vor allem dazu, die Kernfachlichkeit zu unterstĂŒtzen und mit weniger wichtigen Funktionen anzureichern. Bei der Modellierung sollte besonderes Augenmerk auf die Kernfachlichkeit gelegt werden, und sie sollte durch die besten Entwickler umgesetzt werden.
Geteilter Kern (shared kernel)
ist ein Teil der Fachlichkeit, der zwischen unterschiedlichen Projektteilen geteilt wird. Dies ist sinnvoll, wenn die verschiedenen Projektteile nur lose miteinander verbunden sind und das Projekt zu groß ist, um in einem Team umgesetzt zu werden. Der geteilte Kern wird hierbei von allen Projektteams, die ihn nĂŒtzen, gemeinsam entwickelt. Dies benötigt sowohl viel Abstimmungs- als auch Integrationsaufwand.
Kunde-Lieferant (customer-supplier)
ist die Metapher fĂŒr die Beziehung zwischen Projektteams, bei denen ein Team eine Fachlichkeit umsetzt, auf die das andere Team aufbaut. Damit wird sichergestellt, dass das abhĂ€ngige Team vom umsetzenden Team gut unterstĂŒtzt wird, da ihre Anforderungen mit derselben PrioritĂ€t umgesetzt werden wie die eigentlichen Anforderungen an das Lieferantenteam.
Separierter Kern (segregated core)
bezeichnet die Überlegung, die Kernfachlichkeit, auch wenn sie eng mit unterstĂŒtzenden Modellelementen gekoppelt ist, in ein eigenes Modul zu verlagern und die Kopplung mit anderen Modulen zu reduzieren. Damit wird die Kernfachlichkeit vor hoher KomplexitĂ€t bewahrt und die Wartbarkeit erhöht.
Generische Sub-Fachlichkeiten (generic subdomains)
bezeichnet die Idee, diejenigen Teile des DomÀnenmodells, welche nicht zur Kernfachlichkeit gehören, in Form von möglichst generischen Modellen in eigenen Modulen abzulegen. Diese könnten, da sie nicht die Kernfachlichkeit reprÀsentieren und generisch sind, outgesourct entwickelt oder durch Standardsoftware ersetzt werden.
Kontinuierliche Integration (continuous integration)
dient beim Domain-driven Design dazu, alle VerÀnderungen eines DomÀnenmodells laufend miteinander zu integrieren und gegen bestehende Fachlichkeit automatisiert testen zu können.

Transformation

[Bearbeiten | Quelltext bearbeiten]

Eric Evans beschreibt in seinem Buch Techniken fĂŒr das Design neuer Software. Domain-driven Design kann aber auch fĂŒr die Verbesserung und Transformation bestehender Legacy-Software verwendet werden.[14] Dabei behilflich sind spezielle Refactorings.[15]

Vergleich mit anderen Vorgehensweisen und Techniken

[Bearbeiten | Quelltext bearbeiten]
Objektorientierte Analyse und Design
Obwohl sich DDD theoretisch nicht auf objektorientierte Konzepte beschrĂ€nkt, wird DDD in der Praxis hauptsĂ€chlich fĂŒr objektorientierte Analyse und Design eingesetzt. Viele der Konzepte von DDD basieren auf Paradigmen der objektorientierten Softwareentwicklung. DDD kann somit als Methodik fĂŒr objektorientierte Analyse und Design angesehen werden.
Modellgetriebene Softwareentwicklung und modellgetriebene Architektur (MDA)
DDD ist zwar mit modellgetriebener Softwareentwicklung kompatibel, hat aber unterschiedliche Intentionen. Modellgetriebene Softwareentwicklung befasst sich mehr mit den Techniken, wie Modelle in unterschiedlichen Softwareplattformen umgesetzt werden können, wĂ€hrend DDD sich hauptsĂ€chlich damit befasst, wie bessere DomĂ€nenmodelle erreicht werden können. DDD setzt stark auf ein kontinuierlich evolvierendes Modell, welches durch laufendes Refactoring verbessert wird, und dessen Umsetzung auf Softwareplattformen durch modellgetriebene Softwareentwicklung unterstĂŒtzt werden kann.
Plain Old Java Objects (POJOs) und Plain Old CLR Objects (POCOs)
POJOs und POCOs sind technische Konzepte aus Java und .NET. Sie basieren allerdings auf der in DDD ebenfalls propagierten Ansicht, dass Fachobjekte ausschließlich Anforderungen der Fachlichkeiten des DomĂ€nenmodells und nicht technologiespezifische Anforderungen implementieren sollen.
Naked Objects
Naked Objects ist ein Architekturmuster, welches wie DDD davon ausgeht, dass die gesamte Fachlogik in Fachobjekten abzubilden ist. DarĂŒber hinaus propagiert das Naked Objects Architekturmuster, dass die Benutzerschnittstelle eine direkte Abbildung der Fachobjekte sei und somit vollstĂ€ndig aus den Fachobjekten generiert werden sollte – eine Forderung, die DDD nicht stellt.[16]
Objektorientierte Persistenzmechanismen
Objektorientierte Persistenzmechanismen wie Objektrelationale Abbildung oder Objektdatenbanken beschĂ€ftigen sich mit dem Ersatz der Datenzugriffsschicht unter den Fachobjekten. Sie sind somit eine synergetische ErgĂ€nzung fĂŒr Domain-driven Design, da sich damit die Architektur noch stĂ€rker auf die Fachobjekte zentriert.
Data Context Interaction (DCI)
Data Context Interaction ist ein Architekturmuster, welches die Bestandteile des DomÀnenmodells des Domain-driven Designs (EntitÀten, Wertobjekte, Aggregate, Serviceobjekte und Fachliche Ereignisse) ergÀnzen kann, beziehungsweise durch diese ergÀnzt werden kann. So können die Datenobjekte von DCI durch die EntitÀten, Wertobjekte und Aggregate von DDD verfeinert werden, Kontext Objekte wiederum lassen sich durch Serviceobjekte und Fachliche Ereignisse abbilden. Die Rollen der Interaktionen von DCI jedoch erweitern wiederum die Bestandteile des Domain-driven Designs. Beide Technologien können also durchaus als kompatibel und einander ergÀnzend betrachtet werden.
DomÀnenspezifische Sprache (DSL)
Eine domĂ€nenspezifische Sprache (domain-specific language, DSL) ist eine formale Sprache, die speziell fĂŒr ein bestimmtes Problemfeld (die ProblemdomĂ€ne) entworfen und implementiert wird. DDD ist selbst keine und benötigt auch keine DSL, um funktionieren zu können.
Aspektorientierte Programmierung (AOP)
AOP ist eine Technologie, die es im DDD ermöglicht, bestimmte, sonst ĂŒblicherweise tief verwobene technische Aspekte (wie Logging, Security, Transaktionsmanagement) vom DomĂ€nenmodell zu trennen. Damit wird es einfach, dem von DDD gestellten Anspruch der vollstĂ€ndigen Trennung des DomĂ€nenmodells vom Rest der Applikation gerecht zu werden.
Werkzeug- und Materialansatz (WAM)
WAM ist eine Methode zur Software-Entwicklung, die auf Anwendungsorientierung und hohe GebrauchsqualitĂ€t ausgerichtet ist und viele Ähnlichkeiten zu DDD hat. Insbesondere die „Building Blocks“ aus DDD entsprechen in großen Teilen den Entwurfsmetaphern in WAM. Wichtige Idee von WAM ist es, die Werkzeuge und Materialien, mit denen ein Anwender in der realen Welt arbeitet auch in die Software zu ĂŒbertragen. Sie sollen dort fĂŒr den Anwender, aber auch im Code vorhanden sein.
AnÀmisches DomÀnenmodell und Transaction Scripts
Bei einem anĂ€mischen (lat. fĂŒr blutleer) DomĂ€nenmodell enthalten die Fachklassen keine Businesslogik, Entities sind beispielsweise reine Datenstrukturen. Die Businesslogik wird dann ĂŒblicherweise in Service-Klassen mit je einer Methode je Fachlichkeit abgebildet. Diese Methode nennt man auch Transaction Script, da sie alle notwendigen Schritte, von Berechnungen ĂŒber Validierungen bis zu direkten Datenbankzugriffen innerhalb einer Transaktion abbildet.[17] FĂŒr Software mit simpler Fachlichkeit und trivialen Datenstrukturen ohne komplexes Mapping auf eine Datenbank, ist ein anĂ€misches DomĂ€nenmodell und Transaction Scripts oft eine geeignete Lösung.

Literatur

[Bearbeiten | Quelltext bearbeiten]
  • Eric Evans: Domain-Driven Design. Tackling Complexity in the Heart of Software. Addison-Wesley, 2003, ISBN 0-321-12521-5 (englisch, domaindrivendesign.org). 
  • Floyd Marinescu, Abel Avram: Domain-Driven Design Quickly. Lulu Press, 2006, ISBN 1-4116-0925-5 (englisch, InfoQ). 
  • Jimmy Nilsson: Applying Domain-Driven Design and Patterns. With Examples in C# and .NET. 2006, ISBN 0-321-26820-2 (englisch, Artikel auf InfoQ). 
  • Tim McCarthy: .NET Domain Driven Design with C#. Problem – Design – Solution. Wiley, 2008, ISBN 978-0-470-38402-2 (englisch). 
  • Dan Haywood: Domain-Driven Design using Naked Objects. Pragmatic Programmers, 2009, ISBN 978-1-934356-44-9 (englisch, pragprog.com). 
  • Vaughn Vernon: Implementing Domain-Driven Design. Addison-Wesley, 2013, ISBN 978-0-321-83457-7 (englisch). 
  • Vaughn Vernon: Domain-Driven Design kompakt. dpunkt, 2017, ISBN 978-3-86490-439-4 (englisch: Domain-Driven Design Distilled. 2016. Übersetzt von Carola Lilienthal und Henning Schwentner). 

Weblinks

[Bearbeiten | Quelltext bearbeiten]
  • Putting the Model to Work und Strategic Design, 2-teiliger Vortrag von Eric Evans auf der JAOO vom 6. November 2007
  • Domain Driven Design, Interview mit Jimmy Nilsson
  • Eric Evans: What I’ve learned about DDD since the book. Vortrag, ursprĂŒnglich prĂ€sentiert auf der QCon London 2009, aufgenommen bei DDD-NYC SIG.
  • DDD Community
  • Dan Haywood: An Introduction to Domain Driven Design. Methods & Tools, 2009, abgerufen am 12. Juli 2010 (englisch). 
  • Eric Evans: Domain-Driven Design: Reference Definitions and Pattern Summaries. (PDF; 473 kB)
  • Golo Roden: DDD & co. (deutsch) abgerufen am 24. Juli 2021

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. ↑ a b Eric Evans: Domain-Driven Design. Tackling Complexity in the Heart of Software. Addison-Wesley, 2003, ISBN 0-321-12521-5 (englisch, dddcommunity.org [abgerufen am 3. MĂ€rz 2023]). 
  2. ↑ Definition von DDD lt. dddcommunity.org
  3. ↑ Eric Evans: Domain-Driven Design. Tackling Complexity in the Heart of Software. Addison-Wesley, 2003, ISBN 0-321-12521-5, S. xxii (englisch, dddcommunity.org [abgerufen am 3. MĂ€rz 2023]). 
  4. ↑ Floyd Marinescu, Abel Avram: Domain-Driven Design Quickly. Lulu Press, 2006, ISBN 1-4116-0925-5, Kap. 1, S. 4 (englisch, InfoQ: Domain Driven Design Quickly). 
  5. ↑ hexagonale Architektur
  6. ↑ An Introduction to Domain Driven Design. In: www.methodsandtools.com. Abgerufen am 21. Oktober 2016. 
  7. ↑ Anemic Domain Model
  8. ↑ PrĂ€sentation auf der JAOO vom 6. November 2007 von Eric Evans, PrĂ€sentation auf InfoQ
  9. ↑ Domain-driven Design (DDD): Back to the roots. In: SMF. 20. April 2022, abgerufen am 30. Juni 2022 (deutsch). 
  10. ↑ Domain-Driven Design Starter Modelling Process. Domain-Driven Design Crew, 30. Juni 2022, abgerufen am 30. Juni 2022. 
  11. ↑ Vaugh Vernon: Implementing Domain-Driven Design. Addison-Wesley, 2013, ISBN 978-0-321-83457-7 (englisch, 612 S.). 
  12. ↑ Eric Evans: What I’ve learned about DDD since the book. (Video) Domain Language, Inc., Mai 2009, abgerufen am 23. Oktober 2010 (englisch, Diskussion der Domain Events von 13:00 bis 28:05. PrĂ€sentation aufgenommen bei DDD-NYC SIG, ursprĂŒnglich prĂ€sentiert auf der QCon London 2009). 
  13. ↑ Domain-driven Design Quickly, Kapitel 5 Seiten 67ff
  14. ↑ Carola Lilienthal, Henning Schwentner: Domain-Driven Transformation. Monolithen und Microservices zukunftsfĂ€hig machen. Hrsg.: dpunkt.verlag. dpunkt.verlag, Heidelberg 2023, ISBN 978-3-86490-884-2 (312 S.). 
  15. ↑ Henning Schwentner: Domain-Driven Refactorings. Abgerufen am 22. Juni 2025 (englisch). 
  16. ↑ Dan Haywood: Domain-Driven Design using Naked Objects. Hrsg.: Pragmatic Programmers. Pragmatic Programmers, 2009, ISBN 978-1-934356-44-9 (englisch, Domain-Driven Design using Naked Objects). 
  17. ↑ Martin Fowler: Transaction Script. Organizes business logic by procedures where each procedure handles a single request from the presentation. Abgerufen am 9. Juli 2022 (englisch): „Most business applications can be thought of as a series of transactions. A transaction may view some information as organized in a particular way, another will make changes to it. Each interaction between a client system and a server system contains a certain amount of logic. In some cases this can be as simple as displaying information in the database. In others it may involve many steps of validations and calculations. A Transaction Script organizes all this logic primarily as a single procedure, making calls directly to the database or through a thin database wrapper. Each transaction will have its own Transaction Script, although common subtasks can be broken into subprocedures.“ 
Abgerufen von „https://de.wikipedia.org/w/index.php?title=Domain-driven_Design&oldid=262607270“
Kategorien:
  • Softwaretechnik
  • Objektorientierte Programmierung
  • Vorgehensmodell (Software)

  • indonesia
  • Polski
  • Ű§Ù„ŰčŰ±ŰšÙŠŰ©
  • Deutsch
  • English
  • Español
  • Français
  • Italiano
  • Ù…Ű”Ű±Ù‰
  • Nederlands
  • æ—„æœŹèȘž
  • PortuguĂȘs
  • Sinugboanong Binisaya
  • Svenska
  • ĐŁĐșŃ€Đ°Ń—ĐœŃŃŒĐșа
  • Tiáșżng Việt
  • Winaray
  • äž­æ–‡
  • РуссĐșĐžĐč
Sunting pranala
Pusat Layanan

UNIVERSITAS TEKNOKRAT INDONESIA | ASEAN's Best Private University
Jl. ZA. Pagar Alam No.9 -11, Labuhan Ratu, Kec. Kedaton, Kota Bandar Lampung, Lampung 35132
Phone: (0721) 702022
Email: pmb@teknokrat.ac.id