Mida tähendab täht 'O' SOLID-mustris?
sobes.tech AI
Vastus AI-lt
'O' tähendab Open/Closed põhimõtet (Avatud/Suletud põhimõte).
Moodulid (klassid, funktsioonid jne) peaksid olema avatud laiendamiseks, kuid suletud muutmiseks. See tähendab, et uue funktsionaalsuse lisamine ei nõua olemasoleva koodi muutmist.
Näide põhimõtte rikkumisest:
// shape pakett
type Shape interface {
Type() string
}
type Rectangle struct{}
func (r Rectangle) Type() string {
return "rectangle"
}
type Circle struct{}
func (c Circle) Type() string {
return "circle"
}
// calculator pakett
type AreaCalculator struct{}
func (ac AreaCalculator) CalculateArea(shapes []Shape) float64 {
totalArea := 0.0
for _, shape := range shapes {
switch shape.Type() { // Vajalik on muuta seda koodi uue kuju lisamisel
case "rectangle":
// Pinna arvutamise loogika
case "circle":
// Pinna arvutamise loogika
}
}
return totalArea
}
Uue kuju (näiteks Triangle) lisamisel tuleb muuta CalculateArea funktsiooni AreaCalculator.
Näide põhimõtte järgimisest:
// shape pakett
type Shape interface {
Area() float64 // Lisame meetodi Area()
}
type Rectangle struct {
Width, Height float64
}
func (r Rectangle) Area() float64 {
return r.Width * r.Height // Pinna arvutamise loogika on kapseldatud struktuuri
}
type Circle struct {
Radius float64
}
func (c Circle) Area() float64 {
return 3.14 * c.Radius * c.Radius // Pinna arvutamise loogika on kapseldatud struktuuri
}
// calculator pakett
type AreaCalculator struct{}
func (ac AreaCalculator) CalculateArea(shapes []Shape) float64 {
totalArea := 0.0
for _, shape := range shapes {
totalArea += shape.Area() // Kasutame polümorfismi, teadmata konkreetset kuju tüüpi
}
return totalArea
}
Selles näites, uue kuju lisamine, mis rakendab Shape liidest Area() meetodiga, ei nõua muudatusi AreaCalculator koodis. AreaCalculator on avatud laiendamiseks (uute Shape tüüpide lisamiseks), kuid suletud muutmiseks (koodi muutmine uute tüüpide lisamisel).
See saavutatakse polümorfismi ja kapseldamise abil, kus iga kuju arvutamise loogika on peidetud.
See põhimõte aitab luua paindlikumat, hooldatavamat ja laiendatavamat koodi.