Abstractie
Disclaimer: ik ga het woord abstractie, en andere woorden, hier zeer ruim gebruiken. Genuanceerde uitspraken kunnen even de boom in.
Abstractie komt bij software-ontwikkeling vaak voor. Je maakt objecten die een database voorstellen waardoor met een eenvoudige method-call je object automagisch in de database wordt gestopt. Dat is het goede type abstractie.
Het slechte type abstractie is de reden waarom ik hier en daar een grijze haar ontdek. Data-access-objects (DAOs) zijn een mooi voorbeeld. Het idee: je maakt een interface met de ondersteunde functies – vind de gebruiker met id 5, sla een nieuwe gebruiker op – en schrijft daarna de implementatie voor een bepaalde database; Oracle, MySQL, etc. In de rest van de code gebruik je dan een object van het type van de interface, dat op de een of andere manier een instantie van de werkelijke implementatie verbergt.
In 99,9% van de gevallen is dit waardeloos want er wordt maar één type database ondersteund. Zorgt het gebruik van interfaces voor problemen? Nee, niet echt. Maar de configuratie hiervan wel. Ergens moet je duidelijk maken dat je voor interface X een instantie van class Y verwacht. Cue XML files.
Ik ben een Java-developer. Maar ik denk dat ik ondertussen meer XML DTD’s en Schema’s ken dan core Java API. De web.xml file. De Spring servlet files. De Hibernate XML files (granted: je kan het ook in Java, waarvoor dank). Struts config. Tiles. Validators.
Dat onnozel gedoe moet eens gaan stoppen. Ik ben langer bezig met het opzetten van een project en het aanpassen van XML files dan met het schrijven van Java-, HTML- of CSS-code. Oh ja, je kan snel dingen aanpassen in XML files zonder de hele applicatie opnieuw te moeten deployen. Yay! Tien minuten gewonnen in de pruimentijd.
Stop het. Please.
Dit artikel werd opgenomen in ontwikkeling.
-FoX- 01 May 2007 16:39
Het slechte type abstractie bestaat alleen maar in simpele applicaties die niet veel meer doen dan read/save operaties. In deze kleinere applicaties wordt er dan ook vaak maar gebruik gemaakt van 1 type database en kan alles gewoon via ORM. Maar als je het over zware enterprise systemen hebt, waar meerdere persistentie systemen (db, ldap, …) gebruikt worden, is het een ander verhaal.
Niet altijd voldoet object relational mapping, soms is het handig om gewoon plain jdbc te gebruiken om bepaalde (complexe) data weer te geven. Aangezien er maar een kleine overhead is, wordt er dan toch vaak maar een interface voorzien. Vaak is dit niet nodig, en zal het ook nooit nodig zijn… maar mensen maken het graag onnodig complex :)
XML files zijn idd een hell in java web ontwikkeling, maar wat is het alternatief? Annotations zoals in “Dude, where’s my class? (http://uri.jteam.nl/?p=15)”??
Kevin 01 May 2007 16:54
Euh… Java-code begot.
-FoX- 01 May 2007 18:02
Er zijn java web frameworks die dit toepassen. Wicket is hier een goed voorbeeld van.