Vad är invertering av kontroll?
Inversion of control (IoC) är en programmeringsteknik där en allmän kodstruktur används för att styra ett antal unika och specifika subroutiner. Detta förvandlar traditionella programmeringsmetoder, där specifik kod reglerar ett antal återanvändbara och allmänna subrutiner, upp och ner. 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 kodbit mer än en gång, vilket möjliggör en flexibel design där ett programs subroutiner kan kopplas in och ut utan väsentliga förändringar i det övergripande programmet .
Traditionell kontra IoC-programmering
Vid traditionell programmering kommer kodens huvuddel upprepade gånger att kräva allmänna subrutiner som utför enskilda funktioner. Till exempel, i ett program som behandlar redovisning, kommer en subroutine som är utformad för att tillåta slutanvändaren att söka efter ett specifikt ordernummer antagligen 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 områden i programmet. Återanvändning av koden förenklar programmeringsprocessen, men skapar komplexitet om programmeraren vill finjustera sökalgoritmen för en sektion av programmet utan att påverka de andra avsnitten där koden används.
Med samma exempel under en inversion av kontrollscenariot skulle den enda sökundersökningen inte kallas flera gånger över ett antal områden i programmet. Istället skulle varje sektion av programmet innehålla sin egen helt självständiga sökande subroutine. Detta ökar den tid som krävs för att initialt koda programmet, men förenklar alla specifika tweaks som kan behöva göras senare till enskilda subroutiner i designprocessen. Om du ändrar en subroutin i ett specifikt område kommer återstoden av programmet att påverkas helt.
Fördelar med IoC
En stor fördel med denna teknik är att den gör programdesign mycket enklare när man arbetar i storskaliga team. Eftersom kommunikation mellan teammedlemmar nödvändigtvis blir allt svårare när antalet arbetare ökar, gör inversion av kontroll varje team att programmera sina egna individuella rutiner, vilket gör att de kan fungera oberoende av varandra. Det förenklar också påverkan av buggar i systemet, eftersom eventuella kvarstående fel i varje lags underprogram 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 utformar objekt. Medan 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 början programmerare att anställa IoC. Eftersom varje rutin fungerar oberoende, synliggörs de också för omvärlden, vilket vissa företag kan rynka på.