Sobes.tech
Junior

Ko nozīmē burts 'O' SOLID modeļa?

sobes.tech AI

Atbilde no AI

'O' nozīmē Open/Closed principu (Atvērts/Aizvērts princips).

Moduļi (klases, funkcijas utt.) ir jābūt atvērtām paplašināšanai, bet slēgtām modifikācijai. Tas nozīmē, ka jaunu funkcionalitāti var pievienot, nemainot esošo kodu.

Piemērs principa pārkāpumam:

// shape pakotne
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 pakotne
type AreaCalculator struct{}

func (ac AreaCalculator) CalculateArea(shapes []Shape) float64 {
	totalArea := 0.0
	for _, shape := range shapes {
		switch shape.Type() { // Nepieciešams mainīt šo kodu, pievienojot jaunu figūru
		case "rectangle":
			// Lauka aprēķina loģika
		case "circle":
			// Lauka aprēķina loģika
		}
	}
	return totalArea
}

Pievienojot jaunu figūru (piemēram, Triangle), būs jāmaina CalculateArea funkcija AreaCalculator.

Piemērs principa ievērošanai:

// shape pakotne
type Shape interface {
	Area() float64 // Pievienojam metodi Area()
}

type Rectangle struct {
	Width, Height float64
}

func (r Rectangle) Area() float64 {
	return r.Width * r.Height // Lauka aprēķina loģika ir enkapsulēta struktūrā
}

type Circle struct {
	Radius float64
}

func (c Circle) Area() float64 {
	return 3.14 * c.Radius * c.Radius // Lauka aprēķina loģika ir enkapsulēta struktūrā
}

// calculator pakotne
type AreaCalculator struct{}

func (ac AreaCalculator) CalculateArea(shapes []Shape) float64 {
	totalArea := 0.0
	for _, shape := range shapes {
		totalArea += shape.Area() // Izmantojam polimorfismu, nezinot konkrēto figūras tipu
	}
	return totalArea
}

Šajā piemērā, pievienojot jaunu figūru, kas realizē Shape interfeisu ar Area() metodi, nav nepieciešamas izmaiņas AreaCalculator kodā. AreaCalculator ir atvērts paplašināšanai (jaunu Shape tipu pievienošana), bet slēgts modifikācijai (koda izmaiņas, pievienojot jaunas figūras).

Tas tiek panākts, izmantojot polimorfismu un enkapsulāciju, kur katras figūras aprēķina loģika ir paslēpta.

Šis princips palīdz veidot elastīgāku, uzturamu un paplašināmu kodu.