Waarom ik liever een Extension Method gebruik

imageEen ieder die werkt met het .Net Framework 3.0 of hoger werkt vast en zeker met de zogenaamde Extension Methods. Althans, dat dacht ik. Toch spreek ik regelmatig vakgenoten die er weinig of geen gebruik van maken. Hoe komt dit toch? Is het het aloude onbekend maakt onbemind of licht er meer aan ten grondslag?

Maar eerst, wat is een Extension Method? Vrij vertaald is het een uitbreidingsfunctie. Een functie die wordt toegevoegd aan de bestaande set van functies van een bepaald Type. Deze functie is statisch en kan te allen tijd worden aangeroepen. Een klein voorbeeld: het object van het Type String beschikt niet van nature over de mogelijkheid om te bepalen of de tekst die het bevat een geldig e-mailadres bevat. De volgende syntax zou tot niets leiden:

var s = "misschien een emailadres";
if (s.IsValidEmail()) continue;

 

Zodra ik echter de Extension Method IsValidEmail heb gedefinieerd, dan kan ik deze te pas en te onpas aanroepen. Nu hoor ik de lezer al denken: "leuk allemaal, maar we hadden toch al de gewone 'helper' methods die ik in mijn bibliotheek had staan?" Inderdaad, die heb je al, en ik pleit er voor om deze af te stoffen en desnoods zelfs te herschrijven naar Extension Methods. Waarom? Omdat het zo veel meer leesbare code oplevert!

Nu hoorde ik laatst een collega van mij opperen dat er ook nadelen zitten aan het gebruik van Extension Methods. De nadelen die ik later vond stonden gewoon vermeld in de msdn documentatie. En ja, deze zou je als nadelen kunnen betitelen, zelf zie ik ze als slechts een kleine beperking op het grote gemak dat deze functies ons bieden. Volgens de msdn documentatie is het beter om je eigen types te definiëren daar waar mogelijk, je loopt immers het risico dat het Type dat je uitbreidt door een andere partij wordt gewijzigd. Daarmee komt je Extension Method potentieel in de gevarenzone.

Deze waarschuwing uit de documentatie moeten we wel in de gaten houden, het is een terecht punt. Niettemin, denk aan de kracht die Visual Studio je nu kan bieden! Al die oude 'helper' methods worden nu via IntelliSense aangeboden (mits je uiteraard de namespace van de extensionmethod in je using directives hebt geplaatst). Geen uitingen meer van: 'welke functie had ik hier voor bedacht!'

Vandaag heb ik nog een Extension Method voor een simpele afvanging van is null gemaakt. Ik zat met het uitvragen van custom properties in een Xml node.

var s = node.GetProperty("SomePropertyName").Value;

 

Zodra de property niet gevonden zou worden, zou ik een Null-reference Exception om mijn oren krijgen. Bedenk nu dat ik vele van deze regels code moest bewerken. De volgende oplossing werkt dan wel, maar zou mijn code enorm 'vervuilen':

var s = node.GetProperty("SomePropertyName")!=null?
                node.GetProperty("SomePropertyName").Value:
                   String.Empty;

 

Liever maak ik snel een Extension method aldus:

public static string GetNullableValue(this Property value)
{
   if (value == null) return string.Empty;
   return value.Value;
}

 

Dit zorgt er voor dat ik nu elke regel als volgt kan toepassen:

var s = node.GetProperty("SomePropertyName").GetNullableValue();

 

Dus, waarom gebruik ik bijna overal een Extension Method:

  • leesbare code;
  • ondersteuning IntelliSense;
  • snelle opbouw van mijn codebibliotheek;
  • en het is zoooo makkelijk.

 

Laat een opmerking achter