Java >> Java Tutorial >  >> Java

Implementierung von domänengesteuertem Design

Implementierung von domänengesteuertem Design ist ein Software-Design-Ansatz. Wie fängt man an, Software zu entwerfen? Ein komplexes Problem kann überwältigend sein. Selbst wenn Sie sich die vorhandene Codebasis ansehen und das Design herausfinden möchten, kann dies eine Menge Arbeit sein. Beim Erstellen kann das verteilte System komplex werden. Dieser Beitrag ist Teil von Distributed System Design.

Der domänengetriebene Ansatz der Softwareentwicklung arbeitet synchron mit Domänenexperten. Normalerweise würde man das Problem mit Domänenexperten diskutieren, um herauszufinden, welche Domänen und Regeln erstellt werden können und wie sie in der Anwendung geändert werden. Objektorientiertes Design ist nichts anderes als domänengesteuertes Design. Domänen sind Objekte. Unabhängig davon, welche Sprache Sie wählen, müssen Sie Domänenobjekte erstellen.

Diskussion mit Domänenexperten

Ein komplexes Problem erfordert eine Diskussion mit Domänenexperten. Nachdem Sie alle Informationen zu Regeln und Bedingungen gesammelt haben, können Sie damit beginnen, das reale Problem in einem Domänenobjekt darzustellen. Regeln und Bedingungen können dabei helfen, die Domäne darzustellen und wie die Domäne mit anderen Domänenobjekten interagieren würde.

Der erste Schritt besteht darin, Domänenmodellnamen auszuwählen. Auch dies hängt von Ihrer Domain ab.

Wenn wir ein Beispiel einer lokalen Bibliothek nehmen müssen, haben wir Domänenobjekte wie Book , Author , User und Address . Ein Benutzer der Bibliothek leiht das Buch eines bestimmten Autors aus der Bibliothek aus. Natürlich können Sie auch Genre hinzufügen . Entweder würden Sie mit einer örtlichen Bibliothek sprechen und sehen, was sie brauchen, um ein Online-System aufzubauen, um ihren Buchbestand zu verfolgen. Diese Diskussion vermittelt Ihnen eine Vorstellung davon, was Ihr Endbenutzer möchte und wie der Benutzer das System verwenden möchte.

Grundlegende Bausteine

Sobald wir genügend Informationen über die Domain haben, erstellen wir grundlegende Bausteine. Der Grund, mit domänengetriebenem Design als Grundbausteinen zu beginnen, ist, dass dieser Teil des Designs am wenigsten veränderbar ist. Im Laufe der Anwendungslebensdauer wird sich dies nicht ändern. Deshalb ist es wichtig, dies so genau wie möglich zu bauen.

Entitäten

Entitäten sind Domänenobjekte. Wir identifizieren diese Domänenobjekte eindeutig. Eine allgemeine Möglichkeit, diese Objekte zu identifizieren, besteht darin, ein Feld id zu erstellen die vom Typ UUID sein kann.

Wie in unserem Beispiel für den Aufbau eines Online-Bibliothekssystems zur Verwaltung von Büchern besprochen, Book , Author , Genre werden verschiedene Entitäten sein und wir werden ein Feld id hinzufügen in jeder dieser Entitäten, um sie eindeutig zu identifizieren.


public class Book
{
   private UUID id;
   
   private String title;

   private String isbn;

   private Date created;

   private Date updated;
   
}

Wertobjekte

Wertobjekte sind Attribute oder Eigenschaften von Entitäten. Wie oben, wo wir Book erstellt haben Entität, title , isbn sind Wertobjekte dieser Entität.

Repositorys

Dennoch sind Repositories eine Zwischenschicht zwischen Diensten, die auf Domänenobjektdaten aus den Persistenztechnologien wie einer Datenbank zugreifen müssen.

Aggregate

Aggregate sind eine Sammlung von Entitäten. Diese Sammlung ist durch eine Stammentität zusammengebunden. Entitäten innerhalb von Aggregaten haben eine lokale Identität, aber außerhalb dieser Grenze haben sie keine Identität.

Dienste

Dienste steuern das domänengesteuerte Design. Sie sind die Macher des gesamten Systems. Ihre gesamte Geschäftslogik basiert auf Services. Wenn Sie eine Anfrage zum Abrufen oder Einfügen von Daten erhalten, führen Dienste die Validierung von Regeln und Daten mit Hilfe von Entitäten, Repositories und Aggregaten durch.

Fabriken

Wie erstellt man Aggregate? Normalerweise bieten Fabriken Hilfe bei der Erstellung von Aggregaten. Wenn ein Aggregat einfach genug ist, kann man den Konstruktor des Aggregats verwenden, um ein Aggregat zu erstellen.

Eine der Möglichkeiten, Fabriken zu implementieren, ist die Verwendung von Factory Pattern. Wir können auch ein abstraktes Fabrikmuster verwenden, um Klassenhierarchien aufzubauen.

Abschließend, um all dies zu verstehen

  • Aggregate – bestehen aus Entitäten.
  • Aggregate – Dienste nutzen.
  • Fabriken – neue Aggregate erstellen.
  • Repositories – Abrufen, Suchen, Löschen von Aggregaten.

Verstehen des begrenzten Kontexts im domänengesteuerten Design

Die Herausforderung bei jedem Design besteht darin, sicherzustellen, dass unsere Bemühungen nicht doppelt ausgeführt werden. Wenn Sie Feature A mit bestimmten Domänen und ein weiteres Feature B erstellen, das einen Teil der Domänen aus Feature A enthält, verdoppeln wir den Aufwand. Aus diesem Grund ist es wichtig, den begrenzten Kontext beim Entwerfen Ihrer Anwendungsarchitektur zu verstehen. In solchen Fällen kann man leicht das Liskov-Substitutionsprinzip anwenden.

Je mehr Funktionen Sie hinzufügen, desto komplexer wird das Design. Mit zunehmenden Modellen ist es noch schwieriger abzuschätzen, was Sie in Zukunft brauchen werden. Insgesamt bauen Sie in solchen Szenarien einen begrenzten Kontext auf. Der begrenzte Kontext enthält nicht verwandte Modelle, teilt aber auch die gemeinsamen Modelle. Dies hilft bei der Aufteilung der komplexen und großen Modelle, die einige Modelle gemeinsam nutzen können.

Schlussfolgerung

In diesem Beitrag haben wir gelernt, wie man domänengesteuertes Design verwendet, um ein skalierbares System zu erstellen. Wenn Sie mehr über dieses Thema erfahren möchten, können Sie diesen Kurs zum domänengesteuerten Design besuchen.

Gute Neuigkeiten für die Leser – ein Black Friday-Angebot für mein Buch „Simplifying Spring Security“ bis zum 30. November. Hier kaufen.


Java-Tag