Skip to content

Commit

Permalink
Kap. 5 aktualisiert
Browse files Browse the repository at this point in the history
  • Loading branch information
Oli B committed Oct 1, 2024
1 parent b488413 commit 8496b33
Show file tree
Hide file tree
Showing 7 changed files with 70 additions and 44 deletions.
33 changes: 27 additions & 6 deletions src/main/asciidoc/de/05_building_block_view.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -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"]
Expand All @@ -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

Expand All @@ -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]
Expand All @@ -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.


Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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]
----
Expand Down Expand Up @@ -203,6 +217,8 @@ Dazu gehoeren:
* Validatoren
* Exceptions

Das pruefung-Packge befindet sich im Modul `util`.


==== Validatoren

Expand Down Expand Up @@ -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

Expand All @@ -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.
Expand Down
2 changes: 1 addition & 1 deletion src/main/asciidoc/de/08_concepts.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -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.
12 changes: 7 additions & 5 deletions src/main/asciidoc/de/09_design_decisions.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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.
Expand All @@ -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.
Expand Down
18 changes: 7 additions & 11 deletions src/main/asciidoc/images/package-bank.puml
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -17,9 +17,6 @@ package "de.fachwert.bank" {
IBAN iban
BIC bic
}
class Geldbetrag
class GeldbetragFactory
class Waehrung
class Zinssatz

}
Expand All @@ -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
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
@startuml

package "de.fachwert.bank" {
package "de.jfachwert.money" {

class GeldbetragFactory
class Waehrung
Expand Down
42 changes: 23 additions & 19 deletions src/main/asciidoc/images/package-pruefung.puml
Original file line number Diff line number Diff line change
@@ -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
}

}

}
Expand Down
5 changes: 4 additions & 1 deletion src/main/asciidoc/images/packages.puml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ package "jfachwert" {
package "zeit" {
}


package "med" {
}

Expand All @@ -27,6 +26,9 @@ package "jfachwert" {
package "formular" {
}

package "money" {
}

package "bank" {
}

Expand All @@ -38,6 +40,7 @@ package "jfachwert" {
}

bank ..> pruefung
money ..> pruefung
formular ..> pruefung
steuer ..> pruefung
post ..> pruefung
Expand Down

0 comments on commit 8496b33

Please sign in to comment.