Mit jelent az 'O' betű a SOLID mintában?
sobes.tech MI
Válasz az MI-től
Az 'O' a Nyitott/Zárt Elv (Open/Closed Principle) jelentése.
A modulok (osztályok, függvények stb.) nyitottak legyenek a bővítésre, de zártak a módosításra. Ez azt jelenti, hogy új funkcionalitásokat lehet hozzáadni anélkül, hogy a meglévő kódot módosítanánk.
A szabály megsértésének példája:
// shape csomag
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 csomag
type AreaCalculator struct{}
func (ac AreaCalculator) CalculateArea(shapes []Shape) float64 {
totalArea := 0.0
for _, shape := range shapes {
switch shape.Type() { // Ezt a kódot módosítani kell, ha új alakzatot adunk hozzá
case "rectangle":
// A téglalap területének kiszámítási logikája
case "circle":
// A kör területének kiszámítási logikája
}
}
return totalArea
}
Új alakzat (pl. Háromszög) hozzáadásakor módosítani kell a CalculateArea függvényt, hogy kezelje az új típust.
A szabály betartásának példája:
// shape csomag
type Shape interface {
Area() float64 // Az Area() metódus hozzáadása az interfészhez
}
type Rectangle struct {
Width, Height float64
}
func (r Rectangle) Area() float64 {
return r.Width * r.Height // A terület kiszámításának logikája a struktúrában van kapszulázva
}
type Circle struct {
Radius float64
}
func (c Circle) Area() float64 {
return 3.14 * c.Radius * c.Radius // A terület kiszámításának logikája a struktúrában van kapszulázva
}
// calculator csomag
type AreaCalculator struct{}
func (ac AreaCalculator) CalculateArea(shapes []Shape) float64 {
totalArea := 0.0
for _, shape := range shapes {
totalArea += shape.Area() // Polimorfizmust használunk, anélkül, hogy ismernénk a konkrét típusát
}
return totalArea
}
Ebben a példában, egy új Shape-et implementáló típus hozzáadása, amely rendelkezik az Area() metódussal, nem igényli a CalculateArea kód módosítását. A CalculateArea nyitott a bővítésre (új Shape típusok hozzáadása), de zárt a módosításra (nem igényel változtatást új típusok hozzáadásakor).
Ez a polimorfizmus és az inkapszuláció segítségével érhető el, ahol minden alakzat típusában kapszulázva van a terület számításának logikája. Ez az elv elősegíti a rugalmasabb, könnyen karbantartható és bővíthető kód kialakítását.