Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Bewährte Methoden
Modellieren Sie den Geschäftsbereich
Arbeiten Sie vom Geschäftsbereich zurück zum Softwaredesign, um sicherzustellen, dass die Software, die Sie schreiben, den Geschäftsanforderungen entspricht.
Verwenden Sie Methoden des Domain-Driven Designs (DDD) wie Event Storming
Schreiben und führen Sie Tests von Anfang an durch
Verwenden Sie testgesteuerte Entwicklung (TDD), um die Richtigkeit der Software, die Sie entwickeln, zu überprüfen. TDD funktioniert am besten auf Komponententest-Ebene. Der Entwickler entwirft eine Softwarekomponente, indem er zuerst einen Test schreibt, der diese Komponente aufruft. Diese Komponente hat am Anfang keine Implementierung, daher schlägt der Test fehl. In einem nächsten Schritt implementiert der Entwickler die Funktionalität der Komponente, indem er Test-Fixtures mit Scheinobjekten verwendet, um das Verhalten externer Abhängigkeiten oder Ports zu simulieren. Wenn der Test erfolgreich ist, kann der Entwickler mit der Implementierung echter Adapter fortfahren. Dieser Ansatz verbessert die Softwarequalität und führt zu besser lesbarem Code, da Entwickler wissen, wie Benutzer die Komponenten verwenden würden. Die hexagonale Architektur unterstützt die TDD-Methodik, indem sie den Anwendungskern trennt. Entwickler schreiben Unit-Tests, die sich auf das Kernverhalten der Domäne konzentrieren. Sie müssen keine komplexen Adapter schreiben, um ihre Tests durchzuführen. Stattdessen können sie einfache Scheinobjekte und Fixtures verwenden.
Verwenden Sie verhaltensgesteuerte Entwicklung (BDD), um die end-to-end Akzeptanz auf Featureebene sicherzustellen. In BDD definieren Entwickler Szenarien für Funktionen und überprüfen sie mit den Beteiligten aus dem Unternehmen. BDD-Tests verwenden so viel natürliche Sprache wie möglich, um dies zu erreichen. Die hexagonale Architektur unterstützt die BDD-Methodik mit ihrem Konzept von Primär- und Sekundäradaptern. Entwickler können primäre und sekundäre Adapter erstellen, die lokal ausgeführt werden können, ohne externe Dienste aufrufen zu müssen. Sie konfigurieren die BDD-Testsuite so, dass sie den lokalen Primäradapter zum Ausführen der Anwendung verwendet.
Führen Sie automatisch jeden Test in der kontinuierlichen Integrationspipeline durch, um die Qualität des Systems ständig zu bewerten.
Definieren Sie das Verhalten der Domain
Zerlegen Sie die Domäne in Entitäten, Wertobjekte und Aggregate (lesen Sie mehr über die Implementierung von domänengetriebenem Design
Definieren Sie Schnittstellen, die Adapter verwenden können, um mit der Domäne zu interagieren.
Automatisieren Sie Tests und Bereitstellungstests
Nach einem ersten Machbarkeitsnachweis empfehlen wir Ihnen, Zeit in die Implementierung der DevOps Verfahren zu investieren. Beispielsweise helfen Ihnen CI/CD-Pipelines (Continuous Integration and Continuous Delivery) und dynamische Testumgebungen dabei, die Qualität des Codes aufrechtzuerhalten und Fehler bei der Bereitstellung zu vermeiden.
-
Führen Sie Ihre Komponententests in Ihrem CI-Prozess durch und testen Sie Ihren Code, bevor er zusammengeführt wird.
-
Erstellen Sie einen CD-Prozess, um Ihre Anwendung in einer statischen Entwicklungs- und Testumgebung oder in dynamisch erstellten Umgebungen bereitzustellen, die automatische Integration und end-to-end Tests unterstützen.
-
Automatisieren Sie den Bereitstellungsprozess für dedizierte Umgebungen.
Skalieren Sie Ihr Produkt mithilfe von Microservices und CQRS
Wenn Ihr Produkt erfolgreich ist, skalieren Sie Ihr Produkt, indem Sie Ihr Softwareprojekt in Microservices zerlegen. Nutzen Sie die Portabilität, die die hexagonale Architektur bietet, um die Leistung zu verbessern. Teilen Sie Abfragedienste und Befehlshandler in separate synchrone und asynchrone APIs auf. Erwägen Sie die Übernahme des CQRS-Musters (Command Query Responsibility Segregation) und der ereignisgesteuerten Architektur.
Wenn Sie viele neue Funktionsanfragen erhalten, sollten Sie erwägen, Ihr Unternehmen auf der Grundlage von DDD-Mustern zu skalieren. Strukturieren Sie Ihre Teams so, dass sie ein oder mehrere Funktionen als begrenzte Kontexte besitzen, wie zuvor inOrganisational diesem Abschnitt beschrieben. Diese Teams können dann Geschäftslogik mithilfe einer hexagonalen Architektur implementieren.
Entwerfen Sie eine Projektstruktur, die hexagonalen Architekturkonzepten entspricht
Infrastructure as Code (IaC) ist eine weit verbreitete Praxis in der Cloud-Entwicklung. Damit können Sie Ihre Infrastrukturressourcen (wie Netzwerke, Load Balancer, virtuelle Maschinen und Gateways) als Quellcode definieren und verwalten. Auf diese Weise können Sie mithilfe eines Versionskontrollsystems alle Änderungen an Ihrer Architektur verfolgen. Darüber hinaus ist es einfach, die Infrastruktur zu Testzwecken zu erstellen und zu verschieben. Wir empfehlen, dass Sie Ihren Anwendungscode und den Infrastrukturcode bei der Entwicklung Ihrer Cloud-Anwendungen im selben Repository aufbewahren. Mit diesem Ansatz ist es einfach, die Infrastruktur für Ihre Anwendung zu verwalten.
Wir empfehlen, Ihre Anwendung in drei Ordner oder Projekte aufzuteilen, die den Konzepten der hexagonalen Architektur entsprechen:entrypoints
(Primäradapter),domain
(Domäne und Schnittstellen) undadapters
(sekundäre Adapter).
Die folgende Projektstruktur bietet ein Beispiel für diesen Ansatz beim Entwerfen einer API aufAWS. Das Projekt verwaltet Anwendungscode (app
) und Infrastrukturcode (infra
) im selben Repository, wie zuvor empfohlen.
app/ # application code |--- adapters/ # implementation of the ports defined in the domain |--- tests/ # adapter unit tests |--- entrypoints/ # primary adapters, entry points |--- api/ # api entry point |--- model/ # api model |--- tests/ # end to end api tests |--- domain/ # domain to implement business logic using hexagonal architecture |--- command_handlers/ # handlers used to run commands on the domain |--- commands/ # commands on the domain |--- events/ # events emitted by the domain |--- exceptions/ # exceptions defined on the domain |--- model/ # domain model |--- ports/ # abstractions used for external communication |--- tests/ # domain tests infra/ # infrastructure code
Wie bereits erwähnt, ist die Domäne der Kern der Anwendung und ist von keinem anderen Modul abhängig. Es wird empfohlen, dendomain
Ordner so zu strukturieren, dass er die folgenden Unterordner enthält:
-
command handlers
enthält die Methoden oder Klassen, die Befehle in der Domäne ausführen. -
commands
enthält die Befehlsobjekte, die die Informationen definieren, die für die Ausführung einer Operation in der Domäne erforderlich sind. -
events
enthält die Ereignisse, die über die Domäne ausgegeben und dann an andere Microservices weitergeleitet werden. -
exceptions
enthält die bekannten Fehler, die innerhalb der Domäne definiert sind. -
model
enthält die Domainentitäten, Wertobjekte und Domänendienste. -
ports
enthält die Abstraktionen, über die die Domain mit Datenbanken, APIs oder anderen externen Komponenten kommuniziert. -
tests
enthält die Testmethoden (z. B. Business-Logik-Tests), die auf der Domain ausgeführt werden.
Die Primäradapter sind die Zugangspunkte zur Anwendung, wie sie durch denentrypoints
Ordner dargestellt werden. In diesem Beispiel wird derapi
Ordner als primärer Adapter verwendet. Dieser Ordner enthält eine APImodel
, die die Schnittstelle definiert, die der Primäradapter für die Kommunikation mit Clients benötigt. Dertests
Ordner enthält end-to-end Tests für die API. Dies sind oberflächliche Tests, mit denen überprüft wird, ob die Komponenten der Anwendung integriert sind und harmonisch funktionieren.
Die sekundären Adapter, dargestellt durch denadapters
Ordner, implementieren die externen Integrationen, die für die Domain-Ports erforderlich sind. Ein Datenbank-Repository ist ein gutes Beispiel für einen sekundären Adapter. Wenn sich das Datenbanksystem ändert, können Sie einen neuen Adapter schreiben, indem Sie die Implementierung verwenden, die von der Domäne definiert ist. Es ist nicht erforderlich, die Domain oder die Geschäftslogik zu ändern. Dertests
Unterordner enthält externe Integrationstests für jeden Adapter.