Samenvattend: Met interfaces lever je meer waarde aan je klanten
Nog even samenvattend over interfaces en waarom het verstandig is ze toe te passen:
Je kan je applicatie beter testen als je gebruik maakt van interfaces. Door de implementatie onbekend te laten voor het gedeelte van de applicatie dat je wilt testen, kan je situaties nabootsen zonder afhankelijk zijn van het daadwerkelijke bestaan van die situaties: door niet per se gebruik te maken van je daadwerkelijke harde schijf, bijvoorbeeld, kan je in de implementatie van een interface doen alsof de schijf vol is - wat gebeurt er dan? Hoe los je dit op? Zonder interfaces is dit lastig af te vangen. Je hebt ook geen volledige database nodig, als je bijvoorbeeld een IDatabase hebt, maar alleen een implementatie met daarin de data en functionaliteit die je gaat testen.
De applicatie is gemakkelijk uit te breiden: Een interface is een contract, een afgesproken set regels en gedrag. De implementatie dient de functie X() te bevatten, die wordt aangeroepen, en geeft een waarde terug van type Y. Hoe je dat doet en wat er nog meer gebeurt binnen de functie, dat is niet van belang. Als je een nieuwe implementatie maakt, dan kan je die op zich testen, maar wordt zonder morren geïntegreerd binnen de rest van de applicatie.
Het onderhouden van de software is eenvoudiger: je dwingt jezelf (en je collega's) impliciet om code te groeperen in logische plekken en door interfaces verstandig toe te passen, hoeven wijzigingen op zo min mogelijk plekken te worden gedaan. Dat maakt de code robuster, omdat complexiteit software foutgevoeliger maakt.
De vorige blogitems over interfaces, het gebruik ervan en de voordelen, komen op het volgende neer: programmeren middels interfaces, niet implementaties. Je kan je applicatie logisch in elkaar zetten, zonder je (aanvankelijk) bezig te houden met de daadwerkelijke werking van de code. Dit zorgt er voor dat je je ook meer bezig gáát houden met de logica van de applicatie. Met IFileSystem kan ik iets wegschrijven via SaveAs() of ophalen via ReadAsString() en dat is de enige logica waarin ik in eerste instantie in geïnteresseerd ben, in plaats van System.IO.File.Etcetera().
Bovenstaande samengevoegd zorgt er voor dat je sneller meer functionaliteit kan toevoegen aan je applicatie en dus meer waarde kan leveren aan je klanten!