diff --git a/src/main/asciidoc/de/05_building_block_view.adoc b/src/main/asciidoc/de/05_building_block_view.adoc index d8671f9c..6067f728 100644 --- a/src/main/asciidoc/de/05_building_block_view.adoc +++ b/src/main/asciidoc/de/05_building_block_view.adoc @@ -14,7 +14,7 @@ include::../images/packages.puml[] Enthaltene Bausteine:: -Die einzelnen Klassen sind in fachliche Packages aufgeteilt. +Die einzelnen Klassen sind in fachliche Packages aufgeteilt, die jeweils in einem gleichnamigen Modul gebündelt sind: .Packages [cols="1,4" options="header"] @@ -24,6 +24,9 @@ Die einzelnen Klassen sind in fachliche Packages aufgeteilt. |bank |alles, was mit Banken zu tun hat wie `IBAN`, `BIC` oder `Kontonummer` +|money +|hier liegt der `GeldBetrag` und andere Klassen wie `Waehrung`, die das Money-API implementieren + |steuer |das Finanzamt lässt grüßen - hier sind Fachwerte wie `Steuernummer` und `UStIdNr` defniert @@ -49,7 +52,8 @@ Die einzelnen Klassen sind in fachliche Packages aufgeteilt. |Fachwerte für den Umgang mit Zeitangaben |=== -Das pruefung-Package enthält Klassen zur Validierung und zu verschiedenen Pruefzifferverfahren. +Klassen und Interfaces wie z.B. `Fachwert` bzw. `KFachwert`, die für all diese Packages die Basis sind, liegen im core-Modul. +Hier liegt auch das pruefung-Package, das Klassen zur Validierung und verschiedene `PruefzifferVerfahren`. So enthalten manche Fachwerte wie `IBAN` eine Pruefziffer, um Fehleingaben zu erkennen. [IMPORTANT] @@ -70,7 +74,15 @@ include::../images/package-bank.puml[] Mit dem bank-Package hat alles angefangen. Die Fachwerte in diesem Paket repräsentieren Konzepte, die im Bank-Umfeld typischerweise anzutreffen sind. -Die `Geldbetrag` und `Waehrung`-Klasse implementiert dabei die aktuelle Money-API 1.1 und wurde gegen das aktuelle TCK getestet. + +==== money + +["plantuml", "package-money", "svg"] +------------------------------------------------ +include::../images/package-money.puml[] +------------------------------------------------ + +Die `Geldbetrag` und `Waehrung`-Klasse implementiert die aktuelle Money-API 1.1 und wurde gegen das aktuelle TCK getestet. Aus diesem Grund wurde die GeldbetragFactory hinzugefügt, die vom TCK zum Aufsetzen der Tests verwendet wird. @@ -145,6 +157,8 @@ Das util-Package ist mit v0.7 hinzugekommen. Es enthält im Wesentliche die TinyUUID- und SmallUUID-Klasse, die die gleiche Funktionalität wie die UUID-Klasse hat. Lediglich die toString()-Methode liefert eine kompaktere Schreibweise (22 bzw. 25 Zeichen) als die UUID-Klasse (36 Zeichen). +Das util-Package befindets sich im core-Modul. + ==== formular @@ -175,7 +189,7 @@ include::../images/package-zeit.puml[] ------------------------------------------------ Das zeit-Package ist mit v5 hinzugekommen. -Die darin enthalt Zeitdauer-Klasse eignet u.a. für die Zeitmessung von Berechnungen: +Die darin enthalt Zeitdauer-Klasse eignet sich u.a. für die Zeitmessung von Berechnungen: [source,java] ---- @@ -203,6 +217,8 @@ Dazu gehoeren: * Validatoren * Exceptions +Das pruefung-Packge befindet sich im Modul `util`. + ==== Validatoren @@ -247,6 +263,11 @@ Geldbetrag vereinfacht den Umgang mit der Erzeugung von MonetaryAmount-Instanzen * statische valueOf-Methoden (anlog zur BigDecimal-Klasse), * statische of-Methoden (analog zur Money-Klasse) +Mit v6 wurde die Geldbetrag aus dem bank-Packag in ein eigenes money-Modul verschoben. +Damit änderte sich auch das Package zu `de.jfachwwert.money`. +Damit konnte die Abhängigkeit zur Money-API reduziert werden. +Es hatte sich herausgestellt, dass die Geldbetrag-Klasse relativ selten benötigt wird. + ==== ... als Alternative zu BigDecimal @@ -256,9 +277,9 @@ So gibt es auch hier eine valueOf()-Methode, die eine Zahl in einen Geldbetrag u ==== ... als Alternative zur Money-Klasse -["plantuml", "package-bank-geldbetrag", "svg"] +["plantuml", "package-money", "svg"] ------------------------------------------------ -include::../images/package-bank-geldbetrag.puml[] +include::../images/package-money.puml[] ------------------------------------------------ Die GeldbetragFactory ist durch JSR 354 vorgegeben, ebendso die Waehrung-Klasse. diff --git a/src/main/asciidoc/de/08_concepts.adoc b/src/main/asciidoc/de/08_concepts.adoc index b58504f0..8e195608 100644 --- a/src/main/asciidoc/de/08_concepts.adoc +++ b/src/main/asciidoc/de/08_concepts.adoc @@ -16,5 +16,5 @@ Für diese Fachwerte werden die Gemeinsamkeiten in AbstractFachwert zusammengefa Validierung von Fachwerten findet im Konstruktor statt. Zur Unterstützung gibt es eine Reihe von Validatoren und Prüfziffer-Verfahren, die im `pruefung`-Package zu finden sind. -Will man die Validierung direkt ausführen, bitten die meisten Klassen eine validate-Methode im Companion-Objekt an. +Will man die Validierung direkt ausführen, bieten die meisten Klassen eine validate-Methode im Companion-Objekt an. Ansonsten kann man für die Validierung auch direkt auf die Validatoren zugreifen. \ No newline at end of file diff --git a/src/main/asciidoc/de/09_design_decisions.adoc b/src/main/asciidoc/de/09_design_decisions.adoc index 708ef482..e334008a 100644 --- a/src/main/asciidoc/de/09_design_decisions.adoc +++ b/src/main/asciidoc/de/09_design_decisions.adoc @@ -6,7 +6,7 @@ === Keine `null`-Werte Ein Grund für die Migration auf Kotlin war die Unterbindung von null-Werten. -Damit kann schon auf Aufruf-Ebene schon garantiert werden, dass null-Werte nicht weitergegeben werden, sondern sofort zum Fehler führen ("fail fast"). +Damit kann schon auf Aufruf-Ebene garantiert werden, dass null-Werte nicht weitergegeben werden, sondern sofort zum Fehler führen ("fail fast"). === NULL-Konstanten @@ -17,7 +17,7 @@ Damit können Variablen mit diesem Wert vorbelegt werden. === Kein Logging / Minimale Abhängigkeiten -Um nicht von einem bestimmten Log-Framework abhängig zu sein, wurde auf Logging weitgehend verzichtet. +Um nicht von einem bestimmten Log-Framework abhängig zu sein, wird auf Logging weitgehend verzichtet. Das bedeutet, dass in einem Falle eines Fehlers oder fehlerhaften Aufrufs eine hilfreiche Exception ausgelöst wird. Diese Exception stellt alle Informationen zur Verfügung, um die Ursache des Fehlers zu finden. Exceptions, die abgefangen und behandelt werden, werden ueber das Logging-Framework des JDKs protokolliert. @@ -28,9 +28,11 @@ Die einzigen Abhängigkeiten, die in Kauf genommen werden, sind: * kotlin-stdlib: diese Bibliothek kam durch die Umstellung auf Kotlin in v4 hinzu * commons-lang3: diese Bibliothek ist bereits als Abhängigkeit vieler anderer Bibliotheken vorhanden -* validation-api: Basis-Bibliothek für Validierung (wird mit v5 entfernt) -* money-api (JSR 354): diese API sowie einige weitere Bibliotheken dazu sind optional, da sie Java 9 Bestandteil des JDKs sind. - Evtl. müssen sie unter Java 8 als Dependency mit aufgeführt werden, wenn diese Funktionalität benötigt wird. +* validation-api: Basis-Bibliothek für Validierung (nur bis v5) +* money-api (JSR 354): diese API sowie einige weitere Bibliotheken sollten ab Java 9 Bestandteil des JDKs sein. + Tatsächlich müssen sie immer noch als Dependency aufgeführt werden. + Deswegen wurde mit v6 die Bibliothek in verschiedene Unterbibliotheken aufgeilt. + Damit kann diese API-Lib weggelassen werden, wenn kein Umgang mit Geldbeträgen benötigt wird. Mit v4.4 wurde die Abhänigkeit zu commons-text und commons-collections4 wieder entfernt, da Kotlin hierfür genügend Unterstützung anbietet, um die fehlende Funktionalität selbst zu implementieren. Auch wurde die `ValidationException` aus der validation-api-Bibliothek durch eine gleichnamige Exception aus `de.jfachwert.pruefung.exception` ersetzt, um die Abhängigkeit zu JavaEE zu vermeiden. diff --git a/src/main/asciidoc/images/package-bank.puml b/src/main/asciidoc/images/package-bank.puml index 2220ff66..34ca9fd8 100644 --- a/src/main/asciidoc/images/package-bank.puml +++ b/src/main/asciidoc/images/package-bank.puml @@ -1,13 +1,13 @@ @startuml -package "de.fachwert" { +package "de.jfachwert" { interface Fachwert class AbstractFachwert } -package "de.fachwert.bank" { +package "de.jfachwert.bank" { class Kontonummer class IBAN @@ -17,9 +17,6 @@ package "de.fachwert.bank" { IBAN iban BIC bic } - class Geldbetrag - class GeldbetragFactory - class Waehrung class Zinssatz } @@ -31,15 +28,14 @@ AbstractFachwert <|-- IBAN AbstractFachwert <|-- BLZ AbstractFachwert <|-- BIC Fachwert <|.. Bankverbindung -Fachwert <|.. Geldbetrag -Fachwert <|.. Waehrung Fachwert <|.. Zinssatz interface javax.money.MonetaryAmount #white -javax.money.MonetaryAmount <|.. Geldbetrag -Geldbetrag -- Waehrung -GeldbetragFactory .. Geldbetrag -GeldbetragFactory .. Waehrung +javax.money.MonetaryAmount <.. Zinssatz + +class de.jfachwert.math.Prozent + +de.jfachwert.math.Prozent <.. Zinssatz @enduml diff --git a/src/main/asciidoc/images/package-bank-geldbetrag.puml b/src/main/asciidoc/images/package-money.puml similarity index 94% rename from src/main/asciidoc/images/package-bank-geldbetrag.puml rename to src/main/asciidoc/images/package-money.puml index c552ddfa..13a292c2 100644 --- a/src/main/asciidoc/images/package-bank-geldbetrag.puml +++ b/src/main/asciidoc/images/package-money.puml @@ -1,6 +1,6 @@ @startuml -package "de.fachwert.bank" { +package "de.jfachwert.money" { class GeldbetragFactory class Waehrung diff --git a/src/main/asciidoc/images/package-pruefung.puml b/src/main/asciidoc/images/package-pruefung.puml index bfd47011..651cef30 100644 --- a/src/main/asciidoc/images/package-pruefung.puml +++ b/src/main/asciidoc/images/package-pruefung.puml @@ -1,24 +1,28 @@ @startuml -package "pruefung" { - - class AccessValidator - class EMailValidator - class LengthValidator - class Mod11Verfahren - class Mod10Verfahren - class LuhnVerfahren - class NoopVerfahren - class NullValidator - class NumberValidator - class TelefonnummerValidator - - package "exception" { - class IllegalLengthException - class InvalidValueException - class LocalizedValueException - class NullValueException - class PruefzifferException +frame "core" { + + package "pruefung" { + + class AccessValidator + class EMailValidator + class LengthValidator + class Mod11Verfahren + class Mod10Verfahren + class LuhnVerfahren + class NoopVerfahren + class NullValidator + class NumberValidator + class TelefonnummerValidator + + package "exception" { + class IllegalLengthException + class InvalidValueException + class LocalizedValueException + class NullValueException + class PruefzifferException + } + } } diff --git a/src/main/asciidoc/images/packages.puml b/src/main/asciidoc/images/packages.puml index d06569c1..8241d6cb 100644 --- a/src/main/asciidoc/images/packages.puml +++ b/src/main/asciidoc/images/packages.puml @@ -5,7 +5,6 @@ package "jfachwert" { package "zeit" { } - package "med" { } @@ -27,6 +26,9 @@ package "jfachwert" { package "formular" { } + package "money" { + } + package "bank" { } @@ -38,6 +40,7 @@ package "jfachwert" { } bank ..> pruefung + money ..> pruefung formular ..> pruefung steuer ..> pruefung post ..> pruefung