Оё метавонед принсипҳои SOLID-ро шарҳ диҳед ва чӣ гуна онҳоро дар таҳияи нармафзор истифода бурдан мумкин аст?
sobes.tech AI
Ҷавоб аз AI
Принципҳои SOLID — панъятие асосии қоидаҳои тарҳрезии объектӣ-равона мебошанд, ки кӯмак мекунанд, ки кодро чандир, васеъшаванда ва нигоҳдории осон созанд:
-
S — Принсипи масъулияти ягона Ҳар синф бояд танҳо як сабаби тағирот дошта бошад, яъне барои як вазифа масъул бошад.
-
O — Принсипи кушод/банд Синфҳо бояд барои васеъшавӣ кушод бошанд, аммо барои тағирот банд бошанд.
-
L — Принсипи ивазкунии Лисков Объектҳои синфҳои истилоҳӣ бояд тавонанд ҷойгузин кардани объектҳои синфи асосӣ бошанд бе вайрон кардани дурустии барнома.
-
I — Принсипи ҷудоии интерфейсҳо Муштариён набояд аз интерфейсҳое, ки онҳо истифода намебаранд, вобаста бошанд. Беҳтар аст, ки чандин интерфейсҳои махсус дошта бошанд, на як умумӣ.
-
D — Принсипи таранҷом кардани вобастагиҳо Модулҳои сатҳи боло набояд аз модулҳои сатҳи поён вобаста бошанд. Ҳарду бояд вобаста ба абстраксияҳо бошанд.
Масалан дар Go:
// Принсипи масъулияти ягона
// Сохтор (синф) танҳо барои кор бо корбарон масъул аст
type UserRepository interface {
GetUser(id int) (*User, error)
}
// Принсипи таранҷом кардани вобастагиҳо
// Хизмат аз интерфейс вобаста аст, на аз иҷрои мушаххас
type UserService struct {
repo UserRepository
}
func (s *UserService) GetUserName(id int) (string, error) {
user, err := s.repo.GetUser(id)
if err != nil {
return "", err
}
return user.Name, nil
}
Татбиқи принсипҳои SOLID кӯмак мекунад, ки кодро осонтар тест кардан, васеъ кардан ва нигоҳ доштан мумкин шавад.