maandag 9 februari 2009

Dephi Prism: Aspect Oriented Programming

Vorige week heeft CodeGear de Delphi Prism Roadmap vrijgegeven. 1 onderdeel wat me opviel was de support voor "Aspect Oriented Programming" (AOP). Ik heb deze term opgezocht bij Wikipedia (AOP [nl] en AOP [en] ) en simpel gezegd komt het erop neer dat het een uitbreiding is van "Object Oriented Programming", waarbij de nadruk ligt in het verdelen van functionaliteit in "aspecten". Leuk, maar hoe werkt dit in de praktijk?

Gelukkig verscheen eind vorige week een interesante blog op de blogsite van RemObjects (makers van de Oxygene compiler in Delphi Prism): Delphi Prism AOP - Cirrus

Cirrus is de code naam voor de AOP implementatie. Het is een onderdeel van de compiler: tijdens het compileren worden de "aspecten" aan de classes toegevoegd. Het is een beetje te vergelijken met "class c.q. extensions methods" en "partial classes". Maar AOP gaat veel verder, doordat je de aspecten kun hergebruiken en toe kunt passen op alle classes!
Erg interesant, maar de bovenstaande blog was vooral een simpel voorbeeld hoe het technisch werkt, wat ook bleek uit de reacties in de trant van: "Leuk, maar wat kun je er nou mee?". Hierop werd de volgende uitleg gegeven:

The reason this is cool is it allows you to separate your concerns. When you are writing code you don't need mix your concerns by including logging code in your main business logic classes, and you don't need to duplicate the calls to logging in each method.

Keep in mind this is the simplest example. You can use AOP to add multi-threading support, security, logging, etc. to a class. You implement the logging, security, threading, etc. code in one class, and the business logic in another class. Then it is injected for you.

It makes code easier to write and maintain. Less duplication of code so less bugs.

Later verscheen de volgende blog met een specifiek partijk voorbeeld hoe je AOP kunt gebruiken: Prism Aspects to Help with Monobjc Development

AOP is niet de oplossing voor alle problemen, maar zeker een nuttige feature om te gebruiken! Sommige C# programmeurs werden al jalours toen ze die blog lazen... ;-)

Geen opmerkingen: