Skip to content

Commit

Permalink
Dokumentation um Geldbetrag-Klasse ergänzt
Browse files Browse the repository at this point in the history
  • Loading branch information
oboehm committed Jul 23, 2018
1 parent a91adfb commit bde43c2
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 6 deletions.
8 changes: 8 additions & 0 deletions src/main/asciidoc/de/05_building_block_view.adoc
Expand Up @@ -58,6 +58,14 @@ 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.

Ab 0.8 kam die Geldbetrag-Klasse hinzu, die das MonetaryAmount-Interface implementiert.
Geldbetrag vereinfacht den Umgang mit der Erzeugung von MonetaryAmount-Instanzen durch

* Bereitstellung entsprechender Konstruktor,
* statische valueOf-Methode.

Daneben steht (fast) die gleiche Schnittstelle wie der BigDecimal- bzw. Number-Klasse zur Verfügung, sodass eine Portierung von Altlasten, in denen BigDecimal als Datentyp verwendet wurde, einfach möglich ist.


==== steuer

Expand Down
17 changes: 17 additions & 0 deletions src/main/asciidoc/de/09_design_decisions.adoc
Expand Up @@ -72,3 +72,20 @@ Zwei Fachwerte sind gleich, wenn sie jeweils die gleichen Werte besitzen.

Jeder Fachwert hat eine aussagekräftige `toString`-Implementierung.
Meist ist dies der Wert selbst.



=== Eigene Money-Klasse (Geldbetrag)

Mit 0.8 kam die Geldbetrag-Klasse hinzu, die das MonetaryAmount-Interface aus "javax.money" implementiert.
Gründe für eine eigene Implementierung waren:

* Der Umgang mit dem Package "javax.money" und das Anlegen von MonetaryAmount-Objekten ist etwas sperrig.
Ziel war es, den Umgang möglichst einfach, zumindestens aber so einfach wie der Umgang mit BigDicimal-Beträgen zu machen.
* Für Sonderfälle sollte es möglich sein, das Default-Verhalten einer MonetaryAmount-Klasse zu überschreiben.
Dies ist mit der http://javamoney.github.io/ri.html[Referenz-Implementierung] leider nicht möglich.
* Die Geldbetrag sollte als Alternative zur BigDecimal-Klasse eingesetzt werden können.
Dies ist vor allem für die Portierung älterer Anwendungen gedacht, die noch mit BigDecimal arbeiten.

Der letzte Punkt ist auch der Grund, warum die Geldbetrag statt einer of(..)-Methode eine valueOf(..)-Methode besitzt.
Dabei werden die gleichen Parameter wie bei BigDecimal akzeptiert.
3 changes: 3 additions & 0 deletions src/main/asciidoc/de/11_technical_risks.adoc
Expand Up @@ -7,3 +7,6 @@ Durch den überwiegenden Verzicht auf Logging erschwert sich die Fehlersuche.
Dies wird dadurch ausgeglichen, dass nur valide Objekte erzeugt werden können.
Bei fehlerhaften Aufrufen wird eine aussagekräftige Exception geworfen, aus der die Fehlerursache hervorgeht.
--

Durch den Fokus auf Validierung und Optimierung des Speicherverbrauchs spielt Performance eine untergeordnete Rolle.
Dies ist bei der Generierung vieler Objekte zu beachten.
7 changes: 6 additions & 1 deletion src/main/asciidoc/images/package-bank.puml
@@ -1,13 +1,18 @@
@startuml

package "bank" {
package "de.fachwert.bank" {

class Kontonummer
class IBAN
class BLZ
class BIC
class Bankverbindung
class Geldbetrag

}

interface javax.money.MonetaryAmount #white

javax.money.MonetaryAmount <|.. Geldbetrag

@enduml
10 changes: 5 additions & 5 deletions src/main/java/de/jfachwert/bank/Geldbetrag.java
Expand Up @@ -60,7 +60,7 @@ public class Geldbetrag implements MonetaryAmount, Fachwert {
private final Currency currency;

/**
* Erzeugt eine Geldbetrag in der aktuellen Landeswaehrung.
* Erzeugt einen Geldbetrag in der aktuellen Landeswaehrung.
*
* @param betrag Geldbetrag, z.B. 1
*/
Expand All @@ -69,7 +69,7 @@ public Geldbetrag(long betrag) {
}

/**
* Erzeugt eine Geldbetrag in der aktuellen Landeswaehrung.
* Erzeugt einen Geldbetrag in der aktuellen Landeswaehrung.
*
* @param betrag Geldbetrag, z.B. 1.00
*/
Expand All @@ -78,7 +78,7 @@ public Geldbetrag(double betrag) {
}

/**
* Erzeugt eine Geldbetrag in der aktuellen Landeswaehrung.
* Erzeugt einen Geldbetrag in der aktuellen Landeswaehrung.
*
* @param betrag Geldbetrag, z.B. "1"
*/
Expand All @@ -87,7 +87,7 @@ public Geldbetrag(String betrag) {
}

/**
* Erzeugt eine Geldbetrag in der aktuellen Landeswaehrung.
* Erzeugt einen Geldbetrag in der aktuellen Landeswaehrung.
*
* @param betrag Geldbetrag, z.B. 1.00
*/
Expand All @@ -96,7 +96,7 @@ public Geldbetrag(Number betrag) {
}

/**
* Erzeugt eine Geldbetrag in der angegebenen Waehrung.
* Erzeugt einen Geldbetrag in der angegebenen Waehrung.
*
* @param betrag Geldbetrag, z.B. 1.00
* @param currency Waehrung, z.B. Euro
Expand Down

0 comments on commit bde43c2

Please sign in to comment.