Inversion of control (IoC) är en programmeringsteknik där en generell kodstruktur används för att styra ett antal unika och specifika subrutiner. Detta vänder upp och ner på traditionella programmeringsmetoder, där specifik kod styr ett antal återanvändbara och allmänna subrutiner. Inversion av kontroll används vanligtvis i situationer där programmeraren vet att han eller hon inte kommer att behöva återanvända en specifik kod mer än en gång, vilket möjliggör en flexibel design där ett programs subrutiner kan kopplas in och ut utan väsentliga förändringar av det övergripande programmet .
Traditionell kontra IoC-programmering
I traditionell programmering kommer huvuddelen av koden upprepade gånger att kräva allmänna subrutiner som utför individuella funktioner. Till exempel, i ett program som handlar om bokföring, kommer en subrutin som utformats för att tillåta slutanvändaren att söka efter ett specifikt ordernummer förmodligen att anropas flera gånger i olika delar av programmet, vilket gör att användaren kan utföra den mycket allmänna sökalgoritmen från ett antal olika delar av programmet. Återanvändning av koden förenklar programmeringsprocessen, men skapar komplexitet om programmeraren vill justera sökalgoritmen för en del av programmet utan att påverka de andra avsnitten där koden används.
Genom att använda samma exempel under ett inversion av kontrollscenario, skulle den enstaka söksubrutinen inte anropas flera gånger över ett antal områden i programmet. Istället skulle varje avsnitt av programmet innehålla sin egen helt fristående söksubrutin. Detta ökar den tid som krävs för att initialt koda programmet, men förenklar eventuella specifika justeringar som kan behöva göras senare till individuella subrutiner i designprocessen. Att ändra en subrutin i ett specifikt område kommer att lämna resten av programmet helt opåverkad.
Fördelar med IoC
En stor fördel med denna teknik är att den gör programdesign mycket lättare när man arbetar i storskaliga team. Eftersom kommunikation mellan teammedlemmar nödvändigtvis kommer att visa sig svårare och svårare när antalet arbetare ökar, tillåter inversion av kontrollen varje team att programmera sina egna individuella rutiner, vilket gör att de kan fungera oberoende av varandra. Det förenklar också effekten av buggar i systemet, eftersom eventuella kvardröjande fel i varje teams subrutiner endast kommer att påverka deras specifika delar av programmet. På grund av detta, när problem upptäcks i en del av systemet, bör resten av programmet förbli fullt fungerande.
Nackdelar med IoC
Även om inversion av kontroll kan förenkla programdesign, kräver det förkunskaper om hur man designar objekt. Även om varje rutin kan programmeras individuellt, måste en IoC-skapare veta hur man programmerar varje objekt om ändringar behöver göras, så det är inte alltid lätt för en nybörjarprogrammerare att använda IoC. Dessutom, eftersom varje rutin fungerar oberoende, görs de alla synliga för omvärlden, vilket kan vara ogillat av vissa företag.