Inversion of Control
383

Wanneer je object georiënteerde “loosly coupled” software wil opzetten, loop je al vrij snel tegen de uitdaging aan dat objecten elkaar nodig hebben. Er zijn allerhande design best practices om met deze afhankelijkheden om te gaan en in het kader van deze post wil ik je meenemen in de mogelijkheden van Inversion of Control (IOC) frameworks.

Een IOC-framework neemt de verantwoordelijkheid voor het aanmaken van objecten en het managen van de lifecycle van deze objecten over van de applicatie. Stel bijvoorbeeld dat je een proces voor het inlezen, verwerken en versturen van tekstbestanden wilt automatiseren. Dan zou je onderstaande code mogelijk terugzien in de software:

inversion2

De instantiering van de importer, de processor en de writer staan hier hard in de code. Zou je dit vervangen door een IOC-framework dan zou er misschien zoiets staan:

inversion3

Op het oog misschien niet zo’n spectaculaire verbetering, maar toch zijn er grote voordelen behaald:

  • De code is geautomatiseerd te testen doordat het gedrag van de IOC-container in de unittest eenvoudig is aan te passen.
  • De code werkt middels interfaces waardoor het gedrag van dit proces is aan te passen zonder de code te wijzigen.

Dat laatste punt wordt zichtbaar doordat een hoop IOC-frameworks de mogelijkheid hebben om hun gedrag via configuratie in te stellen:

inversion4

Met andere woorden: inversion of control is een absolute aanrader om in je gereedschapskist als ontwikkelaar te hebben.

Meer weten? Er zijn mooie tutorials beschikbaar op het web:
http://www.c-sharpcorner.com/UploadFile/cda5ba/dependency-injection-di-and-inversion-of-control-ioc/

Overzicht hebben in de IOC-frameworks die beschikbaar zijn en hun performance?
http://www.palmmedia.de/blog/2011/8/30/ioc-container-benchmark-performance-comparison

Auteur: Menno Jongerius, Bergler Competence Center 2016