Gränssnittssegregationsprincip

Inom området mjukvaruteknik säger gränssnittssegregationsprincipen ( ISP ) att ingen kod ska tvingas vara beroende av metoder den inte använder . ISP delar upp gränssnitt som är mycket stora i mindre och mer specifika så att kunderna bara behöver veta om de metoder som är av intresse för dem. Sådana krympta gränssnitt kallas också rollgränssnitt . ISP är avsett att hålla ett system frikopplat och därmed lättare att omstrukturera, ändra och omdistribuera. ISP är en av de fem SOLID- principerna för objektorienterad design, liknande GRASPs High Cohesion Principle . Utöver objektorienterad design är ISP också en nyckelprincip i designen av distribuerade system i allmänhet och mikrotjänster i synnerhet. ISP är en av de sex IDEALS-principerna för design av mikrotjänster.

Betydelse i objektorienterad design

Inom objektorienterad design tillhandahåller gränssnitt lager av abstraktion som förenklar kod och skapar en barriär som förhindrar koppling till beroenden .

Enligt många mjukvaruexperter som har undertecknat Manifestet för mjukvaruhantverk är det nästan lika viktigt att skriva välgjord och självförklarande mjukvara som att skriva fungerande mjukvara. Att använda gränssnitt för att ytterligare beskriva programmets avsikt är ofta en bra idé.

Ett system kan bli så kopplat på flera nivåer att det inte längre är möjligt att göra en förändring på ett ställe utan att det krävs många ytterligare ändringar. Att använda ett gränssnitt eller en abstrakt klass kan förhindra denna bieffekt.

Ursprung

ISP:n användes och formulerades först av Robert C. Martin när han konsulterade för Xerox . Xerox hade skapat ett nytt skrivarsystem som kunde utföra en mängd olika uppgifter som häftning och faxning. Mjukvaran för detta system skapades från grunden. När mjukvaran växte blev det svårare och svårare att göra ändringar så att även den minsta förändringen skulle ta en omplaceringscykel på en timme, vilket gjorde utvecklingen nästan omöjlig.

Designproblemet var att en enda jobbklass användes av nästan alla uppgifter. Närhelst ett utskriftsjobb eller ett häftningsjobb behövde utföras gjordes ett anrop till jobbklassen. Detta resulterade i en "fet" klass med mängder av metoder specifika för en mängd olika klienter. På grund av denna design skulle ett häftningsjobb känna till alla metoder för utskriftsjobbet, även om det inte fanns någon användning för dem.

Den lösning som Martin föreslagit använde det som idag kallas för gränssnittssegregationsprincipen. Tillämpat på Xerox-programvaran lades ett gränssnittsskikt mellan Job-klassen och dess klienter till med hjälp av Dependency Inversion Principle . Istället för att ha en stor jobbklass skapades ett Staple Job-gränssnitt eller ett Print Job-gränssnitt som skulle användas av Staple- respektive Print-klasserna, anropsmetoder för Job-klassen. Därför skapades ett gränssnitt för varje jobbtyp, som alla implementerades av klassen Job.

Typisk överträdelse

Ett typiskt brott mot gränssnittssegregationsprincipen ges i Agile Software Development: Principles, Patterns, and Practices in 'ATM Transaction example' och i en artikel som också skrivits av Robert C. Martin specifikt om ISP. Det här exemplet diskuterar användargränssnittet för en bankomat, som hanterar alla förfrågningar såsom en insättningsbegäran eller en uttagsbegäran, och hur detta gränssnitt måste delas upp i individuella och mer specifika gränssnitt.

Se även

  • SOLID – "I" i SOLID står för Interface segregation princip

externa länkar