Ką reiškia raidė 'O' SOLID modelyje?
sobes.tech AI
Atsakymas iš AI
'O' reiškia Open/Closed principą (Atviras/Uždaras principas).
Moduliai (klasės, funkcijos ir kt.) turėtų būti atviri plėtimui, bet uždaryti modifikacijai. Tai reiškia, kad galima pridėti naują funkcionalumą, nekeičiant esamo kodo.
Pavyzdys, kaip pažeisti principą:
// shape paketas
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 paketas
type AreaCalculator struct{}
func (ac AreaCalculator) CalculateArea(shapes []Shape) float64 {
totalArea := 0.0
for _, shape := range shapes {
switch shape.Type() { // Reikia keisti šį kodą, kai pridedama nauja figūra
case "rectangle":
// Ploto skaičiavimo logika
case "circle":
// Ploto skaičiavimo logika
}
}
return totalArea
}
Pridedant naują figūrą (pvz., Triangle), reikės modifikuoti CalculateArea funkciją AreaCalculator.
Pavyzdys, kaip laikytis principo:
// shape paketas
type Shape interface {
Area() float64 // Pridedame metodą Area()
}
type Rectangle struct {
Width, Height float64
}
func (r Rectangle) Area() float64 {
return r.Width * r.Height // Ploto skaičiavimo logika įdėta į struktūrą
}
type Circle struct {
Radius float64
}
func (c Circle) Area() float64 {
return 3.14 * c.Radius * c.Radius // Ploto skaičiavimo logika įdėta į struktūrą
}
// calculator paketas
type AreaCalculator struct{}
func (ac AreaCalculator) CalculateArea(shapes []Shape) float64 {
totalArea := 0.0
for _, shape := range shapes {
totalArea += shape.Area() // Naudojame polimorfizmą, nežinodami konkretaus figūros tipo
}
return totalArea
}
Šiame pavyzdyje, pridedant naują figūrą, įgyvendinančią Shape sąsają su Area() metodu, nereikia keisti AreaCalculator kodo. AreaCalculator yra atviras plėtimui (pridėti naujus Shape tipus), bet uždaras modifikacijai (nekeisti kodo pridedant naujus tipus).
Tai pasiekiama naudojant polimorfizmą ir inkapsuliaciją, kur kiekvieno tipo figūros skaičiavimo logika yra paslėpta.
Šis principas padeda kurti lankstesnį, prižiūrimą ir plėtojimą leidžiantį kodą.