Sobes.tech
Junior — Middle

Оё метавонед принсипҳои SOLID-ро шарҳ диҳед ва чӣ гуна онҳоро дар таҳияи нармафзор истифода бурдан мумкин аст?

sobes.tech AI

Ҷавоб аз AI

Принципҳои SOLID — панъятие асосии қоидаҳои тарҳрезии объектӣ-равона мебошанд, ки кӯмак мекунанд, ки кодро чандир, васеъшаванда ва нигоҳдории осон созанд:

  1. S — Принсипи масъулияти ягона Ҳар синф бояд танҳо як сабаби тағирот дошта бошад, яъне барои як вазифа масъул бошад.

  2. O — Принсипи кушод/банд Синфҳо бояд барои васеъшавӣ кушод бошанд, аммо барои тағирот банд бошанд.

  3. L — Принсипи ивазкунии Лисков Объектҳои синфҳои истилоҳӣ бояд тавонанд ҷойгузин кардани объектҳои синфи асосӣ бошанд бе вайрон кардани дурустии барнома.

  4. I — Принсипи ҷудоии интерфейсҳо Муштариён набояд аз интерфейсҳое, ки онҳо истифода намебаранд, вобаста бошанд. Беҳтар аст, ки чандин интерфейсҳои махсус дошта бошанд, на як умумӣ.

  5. 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 кӯмак мекунад, ки кодро осонтар тест кардан, васеъ кардан ва нигоҳ доштан мумкин шавад.