28Jun
Technologie / Softwareentwicklung 5 Minuten zum Lesen

Verständnis der Clean Architecture

In der sich ständig weiterentwickelnden Landschaft der Softwareentwicklung ist es von größter Bedeutung, skalierbare, wartbare und testbare Anwendungen zu erstellen. Ein architektonischer Ansatz, der für die Erreichung dieser Ziele erheblich an Popularität gewonnen hat, ist die Clean Architecture. Robert C. Martin, auch bekannt als „Uncle Bob“, führte die Clean Architecture als Software-Design-Philosophie ein, die die Trennung der Anliegen und Wartbarkeit priorisiert. Im Kern teilt die Clean Architecture die Anwendung in Schichten, von denen jede ihre eigene Verantwortung hat, was das Management und die Weiterentwicklung erleichtert. Anwendungen, die das Prinzip der Dependency Inversion und die Prinzipien des Domain-Driven Design (DDD) befolgen, verkörpern die Clean Architecture.

Clean Architecture fördert die Softwarestruktur für verbesserte Testbarkeit, Wartbarkeit und Skalierbarkeit. Sie trennt die Anliegen und unterstützt eine flexible Codebasis, um sich an sich entwickelnde Anforderungen und Technologien anzupassen.

Ziele der Clean Architecture

Clean Architecture zielt darauf ab, Software zu erstellen, die einfach zu verstehen, zu warten und zu testen ist. Sie betont die Trennung von Anliegen und die Schaffung klar definierter Grenzen zwischen verschiedenen Teilen der Anwendung. Diese Trennung ermöglicht einfacheres Testen einzelner Komponenten.

Vorteile der Clean Architecture

  • ➤ Framework-Unabhängigkeit: Kann mit ASP.NET (Core), Java, Python usw. verwendet werden, ohne auf eine bestimmte Softwarebibliothek oder proprietäre Codebasis angewiesen zu sein.
  • ➤ Testbarkeit: Kann mit ASP.NET (Core), Java, Python usw. verwendet werden, ohne auf eine bestimmte Softwarebibliothek oder proprietäre Codebasis angewiesen zu sein.
  • ➤ UI-Unabhängigkeit: Logik wird von der UI getrennt, was es einfach macht, Technologien zu wechseln, z.B. von Angular zu React oder Blazor.
  • ➤ Datenbank-Unabhängigkeit: Trennt Datenzugriffsbelange sauber, was Änderungen von SQL Server zu CosmosDB erleichtert.
  • ➤ Unabhängigkeit von externen Systemen: Der Kern ist vollständig isoliert von der Außenwelt, was Langlebigkeit und einfache Updates gewährleistet.
  • ➤ Lose Kopplung: Fördert lose Kopplung zwischen Komponenten und Schichten, was Wartbarkeit und Skalierbarkeit erhöht.

Clean Architecture: Das große Ganze

  • 1. Geschäftslogik und Anwendungsmodell im Zentrum: Stellt sicher, dass wesentliche Aspekte der Software unabhängig und gut definiert sind.
  • 2. Umgekehrte Abhängigkeit: Geschäftslogik hängt nicht von Datenzugriffs- oder Infrastrukturfragen ab; stattdessen hängt die Infrastruktur vom Anwendungskern ab.
  • 3. Klare Abstraktionen im Anwendungskern: Definiert klare Abstraktionen (Schnittstellen), die wesentliche Verträge darstellen.
  • 4. Implementierung in der Infrastruktur-Schicht: Konkrete Implementierungen befinden sich in der Infrastruktur-Schicht und kümmern sich um Datenzugriff, externe Dienste usw.
  • 5. Einwärts gerichteter Fluss der Abhängigkeiten: Alle Abhängigkeiten fließen nach innen zum Anwendungskern, was eine strikte Trennung der Anliegen gewährleistet.

Schichten in der Clean Architecture

  • ➤ Domain-Schicht: Kern der Architektur, der Geschäftslogik implementiert, ohne von anderen Schichten abhängig zu sein.
  • ➤ Anwendungs-Schicht: Mittlere Schicht, die Daten zwischen Domain- und Präsentations-/Infrastruktur-Schichten verwaltet.
  • ➤ Infrastruktur-Schicht: Beinhaltet Klassen für den Zugriff auf externe Ressourcen wie Dateisysteme, Web-Dienste und Datenbanken.
  • ➤ Präsentations-Schicht: UI-Code, der ASP.NET Core zur Erstellung von Schnittstellen verwendet.
Clean Architecture; horizontale Schichtansicht

Domain Driven Design (DDD)

Domain-Driven Design (DDD) ist eine Reihe von Prinzipien und Mustern für das Design von Software, die sich auf die Kern-Domain und deren Logik konzentrieren. DDD betont die Zusammenarbeit zwischen technischen und fachlichen Experten, um iterativ ein konzeptionelles Modell zu verfeinern, das komplexe geschäftliche Anforderungen adressiert. Die Schlüsselkonzepte von DDD umfassen:

• Entities: Objekte mit einer eindeutigen Identität, die verschiedene Zustände im System durchlaufen.
• Value Objects: Unveränderliche Objekte, die einen beschreibenden Aspekt der Domain darstellen, ohne konzeptionelle Identität.
• Aggregates: Ein Cluster von Domain-Objekten, die als eine Einheit für Datenänderungen betrachtet werden.
• Repositories: Mechanismen zur Kapselung von Speicherung, Abruf und Suchverhalten, die eine Sammlung von Objekten nachahmen.

Testing in der Clean Architecture

Testing in der Clean Architecture umfasst das Testen jeder Schicht unabhängig, um sicherzustellen, dass alle Komponenten korrekt funktionieren und richtig miteinander interagieren. Dies ist ein sehr wichtiger Schritt und reduziert die Komplexität erheblich.

  1. ➤Mocking: Erstellen von Objekten, die das Verhalten von echten Objekten simulieren. In diesem Fall können Sie Ihre Datenbank-Repositories ohne die tatsächliche Implementierung nachahmen.
  2. ➤ Dependency Injection: Übergeben von Abhängigkeiten (wie Repositories) an Ihre Anwendungsfälle oder Dienste, um das Unit-Testing zu erleichtern.
  3. ➤ Isolation: Sicherstellen, dass jeder Test unabhängig ist und nicht auf den Zustand oder die Daten anderer Tests angewiesen ist.

Implementierung der Clean Architecture

  • 1. Konfiguration der Domain-Schicht: Definieren Sie Entities, Enums, Ausnahmen, Schnittstellen und Typen.
  • 2. Konfiguration der Anwendungs-Schicht: Schreiben Sie Geschäftslogik und Dienstschnittstellen, wobei lose Kopplung beibehalten wird.
  • 3. Konfiguration der Infrastruktur-Schicht: Implementieren Sie Datenzugriff und Interaktionen mit externen Ressourcen basierend auf den Core-Schnittstellen.
  • 4. Konfiguration der Präsentations-Schicht: (Keine spezifischen Details angegeben.)

Zu beachtende Prinzipien

1. Trennung der Anliegen: Vermeiden Sie das Mischen verschiedener Code-Verantwortlichkeiten in derselben Methode/Klasse/Projekt.
2. Einzelverantwortung: Jedes Modul/Komponente sollte nur einen Grund zur Änderung haben.
3. Don’t Repeat Yourself (DRY): Vermeiden Sie duplizierten Code oder Logik.
4. Umgekehrte Abhängigkeiten: Hochrangige Richtlinien sollten nicht von niederrangigen Details abhängen; verwenden Sie Dependency Injection, um lose Kopplung zu fördern.

Fazit

Clean Architecture bietet eine robuste Grundlage für den Aufbau von Microservices mit .NET Core Web API. Durch die Einhaltung der Prinzipien der Trennung der Anliegen und der Inversionsabhängigkeit können Entwickler skalierbare, wartbare und testbare Anwendungen erstellen. Die Umsetzung von Clean Architecture sorgt für eine solide Grundlage für die sich ständig ändernden Anforderungen der modernen Softwareentwicklung.

Mehr erfahren, besuchen Sie unser GitHub

Nuwan Pradeep
Full Stack Engineer