Vad är principen om enskilt ansvar?
I datorprogrammering och design är principen om enskilt ansvar ett koncept som stöder uppfattningen att alla klasser i ett program endast ska utföra en funktion i den större applikationen. Denna idé främjar delvis några av idealen för objektorienterad programmering, till exempel inkapsling, eftersom en hel klass kommer att fokuseras på att utföra ett enda ansvar och kommer att ha lite beroende av externa klasser. Samtidigt är det något antitetiskt för några av begreppen för tidig objektorienterad programmering, eftersom funktionen för ett enda objekt frikopplas från data att objektet hanterar, vilket innebär att många objekt i kombination kan behöva konstrueras för att upprätthålla en del centrala data. Principen för enskilt ansvar är grunden för en typ av designmodell som kallas ansvarsdriven design.
Ett exempel på principen om enskilt ansvar kan ha formen av en traditionell telefonhandenhet. Vissa designprinciper skulle se handenheten as ett enda objekt som hanterar båda ingångarna från telefonlinjen och överföringen av utgången från högtalaren. Enligt en enda ansvarsmodell, där ett enda objekt endast skulle ha ett enda ansvar, skulle handenheten bestå av flera separata objekt som var och en utförde en enda funktion, till exempel att endast få inmatning från telefonlinjen, eller bara utföra data genom hörlurarna.
En av fördelarna med att använda principen om enskilt ansvar möjliggör är en mycket hög nivå av abstraktion och modularitet. I handenhetsexemplet kan antingen ingången från telefonlinjen eller hur signalen matas ut till användaren ändras utan att påverka grannklasserna så länge de följer samma kontrakt för gränssnitt. Dessutom kan återanvändbarheten för vissa komponenter vara mycket hög, eftersom varje klass är helt inkapslad och förlitar sigY Little, om inte alls, på omgivande föremål, i stället fokuserar på sitt enda ansvar.
En komplikation som principen om enskilt ansvar kan skapa är en stor mängd klasser och objekt som alla arbetar med samma data. Detta kan innebära en stor mängd omkostnader och en komplicerad designprocess. Det kan också göra felsökning ett stort program svårt, eftersom en enda del av programmet kan bestå av tusentals små klassfiler.
När principen om enskilt ansvar tillämpas genom en ansvarsstyrd design, separeras data och metoder som används för att manipulera uppgifterna för designändamål. Även om detta leder till en viss frihet, inkapsling och modularitet i designen, kan det också generera ett antal mellanliggande mönster och mönster som måste användas för att underlätta ett antal klasser som alla försöker interagera med data på en gång. Å andra sidan, om ett objekts data och metoderna som används för att manipulera det är allt bundethenne i ett enda objekt med flera ansvar, då kan koden bli svårare att ändra som systemskala, ändra eller bli mer komplex.