Kommentare zu: Hexagonale Architektur mit Quarkus [Tutorial] https://www.happycoders.eu/de/software-craftsmanship/hexagonale-architektur-quarkus/ Fri, 29 Nov 2024 10:57:43 +0000 hourly 1 Von: Sven Woltmann https://www.happycoders.eu/de/software-craftsmanship/hexagonale-architektur-quarkus/#comment-22380 Thu, 14 Dec 2023 10:18:56 +0000 https://www.happycoders.eu/?p=37901#comment-22380 Als Antwort auf Henni.

Hallo Henni,

geschäftliche Validierungsregeln gehören in das Datenmodell, das im Application Hexagon liegt.

Der sicherste Weg, nur gültige Modellobjekte zu erzeugen, ist, die Validierung in den Konstruktoren oder zustandsändernden Methoden der Modellklassen durchzuführen.

Du kannst auch die Modellklassen mit Validator-Annotationen versehen und z. B. am Ende des Konstruktors das Objekt sich selbst validieren lassen - oder direkt ein Mapping-Framework einsetzen, das die REST-Adapter-Entities auf Modell-Entities mappt und dabei die Validator-Annotationen prüft.

Zusätzlich kannst Du natürlich auch die Annotationen im REST-Modell belassen. Dann generiert das REST-Framework direkt die Fehlermeldungen. Ich ziehe es meistens vor, meine eigenen Fehlermeldungen zu erstellen.

Man muss noch beachten, dass es unterschiedliche Validierungsregeln bei der Erzeugung neuer Entities einerseits und der Rekonstituierung bestehender Entities aus der Datenbank andererseits geben kann:

- Bei der Erzeugung neuer Entities müssen alle aktuellen Validierungen standhalten.
- Die Datenbank kann Entitäten enthalten, die nach einem früherem Stand der Validierungsregeln oder nach früherem Stand anderer Entities gültig waren, es nach aktuellem Stand aber nicht mehr sind. Diese möchte man ggf. dennoch rekonstituieren können.

Für den zweiten Fall findest du ein Beispiel im Demo-Code:
https://github.com/SvenWoltmann/hexagonal-architecture-java/blob/main/model/src/main/java/eu/happycoders/shop/model/cart/Cart.java

Die Methode `addProduct(...)` in Zeile 27 prüft, ob von dem Produkt noch ausreichend Einheiten verfügbar sind.

Die Methode `putProductIgnoringNotEnoughItemsInStock(...)` in Zeile 34 hingegen ignoriert die Verfügbarkeit, denn ich möchte einen Warenkorb auch dann aus der Datenbank laden können, wenn die Produkte nicht mehr auf Lager sind und dem User dann eine entsprechende Meldung in seinem Warenkorb anzeigen.

Ich hoffe, ich konnte dir damit weiterhelfen.

Viele Grüße
Sven

]]>
Von: Henni https://www.happycoders.eu/de/software-craftsmanship/hexagonale-architektur-quarkus/#comment-22319 Sun, 10 Dec 2023 17:43:38 +0000 https://www.happycoders.eu/?p=37901#comment-22319 Deine Blog-Artikel zum Thema "Hexagonale-Architetkur" sind wirklich hervorragend. Eine Sache beschäftigt mich trotzdem weiterhin. Wir haben bei uns im Projekt mit Quarkus die Generierung der Modell-Klassen im REST-Adapter in den OpenAPI-Generator ausgelagert. Der Open-API-Generator erzeugt neben den Klassen auch viele Annotations vom Hibernate Validator. Gehören diese Validierungen (z.B. @Size(1, 40), @NotNull, @Min(1), @Max(31)) nicht eigentlich in den Service-Layer. Wir haben diese Validierungen erstmal im Adapter gelassen und im Application-Layer benutzerdefinierte (komplexere) Validierungen geschrieben. Was denkst du dazu? Sollen auch die einfacheren Validerungen in den Application Layer? Was ist das generelle Vorgehen bei Validierungen im Kontext der hexagonalen Architektur?

]]>