Sammansättning till undsättning arv

Du kan tro mig på ordet, det slutar alltid med att få

Begreppet arv är ett koncept som man måste behärska när man använder ett språk som objektOm du vill organisera din kod runt objekt, det är en stor möjlighet att du kommer att ställas inför behovet av att använda arv. Även om arvet ger en hel del obestridliga fördelar, detta är inte svaret på alla problem. Om du faller in i den urskillningslösa användningen av arv, det är en stor chans att du mordiez fingrar några månader senare när du behöver för att utveckla funktionella omfattningen av din ansökan.

Det är naturligtvis frestande att säga,"Om jag ärver från Foo, då kommer jag att ha alla sina funktioner utan någon ansträngning.".

Men på samma gång, kommer du binder mycket starkt till båda dina klasser och om de kommer att avvika i framtiden kommer du inte att kunna att du bara säga"Ok, de delar samma när några funktioner". Du kommer då att börja inse att det är nu svårt att testa var och en av dessa klasser, och att det är långt från självklart till split.

Problemen börjar.

Oro för utvecklare som inte har upplevt är att man inte inser detta faktum som i mitten av ett projekt eller när klienten vill göra en förändring i driften av ett befintligt element. Det är nödvändigt för att kunna upptäcka olika typer av relationer som kan finnas mellan klasser. En klass kan vara kopplade till varandra genom tre typer av relationer: sammansättning kommer alltid att vara mer flexibel än en mixins och kommer inte att vara direkt relaterade till den klass som värdar i kontrast till arvedel. Därför var det nu de fordon som har en hastighet, kan bilen rulla och helikoptrar kan flyga. Låt oss nu säga att man vill skapa en klass för flygplan tekniskt kan lyfta och flyga. Hur man gör det. Naturligtvis, vi kan använda mixins, men detta är varken mer eller mindre än en form av multipelt arv. Det skulle vara mycket bättre än vår nuvarande lösning och skulle lösa våra problem.

Vår plan är halvvägs mellan bil och helikopter

En annan lösning skulle vara att använda den sammansättning, som gör att du kan isolera beteenden i specialiserade klasser. Vi kommer då att använda instanser av dessa klasser i andra klasser.

Det gör det därför möjligt att ha klasser ren, koncist, utan metoder som är överflödigt, och mycket enkelt testbara.

Använd sammansättning, det är att ha tillgång till hela kraften i en särskild klass för att manipulera ett objekt. Så vi kan sätta den på plats: jag ge dig om att denna lösning är mer utförlig än mixins men det är också mycket mer flexibel och kraftfull, och kommer i praktiken förmodligen enklast att testa. För demonstration, jag initieras de objekt som Hjul och Vingarna på flugan, men i praktiken tenderar att göra detta arbete med initiering i initialize metoden, som skulle göra det möjligt att ha persistenta objekt och för att undvika problem för konkurrensen. I praktiken ingen anledning att följa en exakt metod, varför använda sammansättning, mixins, eller arvedel i ett exklusivt sätt när du kan blanda de tre. Han måste veta hur man ska anpassa och använda den lösning som kommer att vara mer flexibel. Vi kommer därför att använda arv när det behövs, kom ihåg att"en utvecklare är en person". Vi kommer att gå vidare till mixins när man är i den situationen,"en utvecklare agerar som en anställd". Det kommer förmodligen att vara att sammansättningen om detta förhållande visar sig vara något av en komplex, ett objekt som kräver en särskild klass. För att sammanfatta innehållet i denna artikel, tänk på dina klasser så att de är de mest modulära som möjligt, stick inte in dig i en låda som du kanske inte går så småningom ut, kom ihåg att tydligt avgränsa ansvar.

Om ditt test är svåra att genomföra, det är ofta tecken på en arkitektonisk fråga som bör du lägga en loppa på det örat.

Idag kommer vi att tala om arkitektur. i en app Utsikt. Sisi, det är möjligt.