-
Notifications
You must be signed in to change notification settings - Fork 0
Clean Architecture
Das Minecraft-Smarthome wurde mittels der Clean Architecture in Module unterteilt. Seine Aufgabe ist es, einen Minecraft-Server zu einem Smarthome-System zu machen, und über das Netzwerk mit dem Smarthome-Connector zu kommunizieren. Dabei ergeben sich zwei offensichtliche Abängigkeiten, nämlich die Netzwerk-Kommunikation und die Interaktion mit dem Minecraft-Server. Natürlich gibt es hier inhärente Abhängigkeiten, die auch durch Nutzung der Clean Architecture nicht verhindert werden. Es wurde jedoch versucht, diese auf ein Minimum zu beschränken. Dazu wurde herausgearbeitet, welche Eigenschaften von Minecraft notwendig sind, um darin ein Smarthome-System umzusetzen. Jedes Software-System, das diese Eigenschaften besitzt, kann somit ohne Änderung des Applikations-Codes Minecraft ersetzen. Auch die Abhängigkeit auf unseren Smarthome-Connector ist vorgesehen. Da dieser ebenfalls von uns entwickelt wurde, ist ein Austausch hier nicht vorgesehen. Trotzdem wurde die Schnittstelle zwischen beiden zur Erleichterung von potentiellen späteren Änderungen minimal gehalten. Die Verwendung einer Rest-API wurde vollständig von der Applikationslogik entkoppelt. Die Rest-API könnte also nur durch Änderung ihres Plugins und Adapters durch beispielsweise grpc, Pipes, Shared Memory oder direkte Java-Aufrufe ersetzt werden.
Die "Module" sind hierbei sowohl Java-Module als auch Maven-Module. Die "Richtung" der Dependencies wird daher auch durch den Compiler durchgesetzt. Nur die Plugins, und nicht die Adapter oder der Applikations-Code, haben Zugriff auf die jeweiligen verwendeten Libraries, wie die Minecraft-Server-API "Paper", die wir verwenden.
Im Minecraft-Smarthome wurden dafür drei Module (Schichten) implementiert.
- Eine Anwendungsschicht namens
controller - Eine Adapterschicht namens
minecraft-adapter - Ein Plugin namens
minecraft
Plugin und Adapter zur Netzwerkkommunikation waren geplant, wurden aber nicht umgesetzt.
Die Aufgabe von controller ist, ein Smarthome mit verschiedenen Geräten und deren aktuellen Zuständen zu repräsentieren und mit dem Minecraft- und Netzwerk-Plugin zu kommunizieren, welche die Zustände ändern können. Eine solche Änderung soll dann dem jeweils anderen Plugin mitgeteilt werden. Das Minecraft-Plugin kann außerdem Geräte hinzufügen und entfernen.
minecraft bindet einen Minecraft-Server als "UI" ein, um Zustände des Smarthomes darin anzeigen, ändern sowie Geräte hinzufügen und entfernen zu können.
Im Folgenden soll beispielhaft gezeigt werden, wie Dependency Inversion eingesetzt wurde, um Kommunikation zwischen den Schichten nicht nur von Plugin zu Adapter zu Anwendungscode, sondern auch andersrum zu ermöglichen.