Allereest alle goede wensen voor dit nieuwe jaar! Laten we direct het belangrijkste onderwerp van 2010 bespreken: geld. Dit is wellicht wat kortzichtig en bekrompen echter heeft dit onderwerp menig architect in verlegenheid gebracht. Niet omdat het project duurder uitviel dan verwacht maar meer omdat de rol van geld (bedragen) binnen software architectuur wel eens onderschat wordt. Laten we de waarde van een bedrag maar opslaan in een decimal of floating point veld, we doen er verder toch niet zo veel mee. Fair enough.
Maar dan: de applicatie moet meer gaan rekenen met die bedragen: optellen, percentages en (hopelijk) vermenigvuldigen. Geen probleem: de meeste programmeertalen kunnen deze eenvoudige operaties al uitvoeren op primitives. So far, so good. Echter zijn deze berekeningen nu overal versplinterd in de codebase terug te vinden.
Nu de applicatie zo succesvol is dat er ook andere valuta dan de euro gebruikt gaan worden, gaat het jammerlijk mis: overal moeten bedragen omgerekend worden naar de ene valuta.Vervolgens moet er een bedrag bij opgeteld worden, waarna het resultaat weer terug omgerekend moet worden naar de begin valuta. Dit is natuurlijk vragen om problemen.
Er is echter een oplossing: het Money pattern zoals beschreven door Martin Fowler in zijn boek Patterns of Enterprise Application Architecture. En dit is werkelijk een schitterende oplossing met dank aan zijn eenvoud: maak een Money klasse die verantwoordelijk is voor het beheren van het bedrag, de valuta en het uitvoeren van berekeningen en transformaties van de ene valuta naar het andere. Er is nu een verantwoordelijke voor beheren van de kleintjes: de Money klasse. Heerlijk, ik wou dat mijn persoonlijke financiën ook zo makelijk te beheren waren.
Persoonlijk maak ik altijd gebruik van een Money klasse, ook in de meest eenvoudige applicaties omdat je maar nooit weet of het nodig zal zijn. In dit geval: better safe than sorry. Zijn jullie het hier mee eens? Of heb je een eigen oplossing? Plaats een reactie en deel je mening of ervaring!