Sobes.tech
Senior

Povedzte prípad použitia rozhraní v produkčnej logike z pohľadu architektúry

sobes.tech AI

Odpoveď od AI

V produkčnej logike v jazyku Go sa často používajú rozhrania na dosiahnutie slabého prepojenia medzi komponentmi a uľahčenie testovania.

Napríklad v architektúre aplikácie je možné definovať rozhranie pre vrstvu prístupu k dátam:

// UserRepository opisuje metódy pre prácu s používateľmi
type UserRepository interface {
    GetUserByID(id int) (*User, error)
    SaveUser(user *User) error
}

V biznis logike (vrstva služieb) prijímame toto rozhranie, bez závislosti od konkrétnej implementácie (napríklad databázy alebo mocku pre testy):

func NewUserService(repo UserRepository) *UserService {
    return &UserService{repo: repo}
}

func (s *UserService) GetUserProfile(id int) (*UserProfile, error) {
    user, err := s.repo.GetUserByID(id)
    if err != nil {
        return nil, err
    }
    // dodatočná logika
    return &UserProfile{User: user}, nil
}

Tento prístup umožňuje:

  • Jednoducho meniť implementáciu repozitára (napríklad prepínanie medzi databázami alebo používanie mocku pre testy).
  • Izolovať biznis logiku od detailov ukladania dát.
  • Zlepšiť čitateľnosť a údržbu kódu.

V produkcii to pomáha vytvárať flexibilné a škálovateľné aplikácie s jasným rozdelením zodpovedností.