Senior
Povězte případ použití rozhraní v produkční logice z pohledu architektury
sobes.tech AI
Odpověď od AI
V produkční logice v jazyce Go se často používají rozhraní k dosažení nízké vazby mezi komponentami a usnadnění testování.
Například v architektuře aplikace lze definovat rozhraní pro vrstvu přístupu k datům:
// UserRepository popisuje metody pro práci s uživateli
type UserRepository interface {
GetUserByID(id int) (*User, error)
SaveUser(user *User) error
}
V podnikové logice (servisní vrstvě) přijímáme toto rozhraní, aniž bychom záviseli na konkrétní implementaci (například databázi nebo mock pro 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
}
// doplňková logika
return &UserProfile{User: user}, nil
}
Tento přístup umožňuje:
- Snadno měnit implementaci repozitáře (například přepínání mezi databázemi nebo použití mock pro testy).
- Izolovat podnikovou logiku od detailů ukládání dat.
- Zlepšit čitelnost a údržbu kódu.
V produkci to pomáhá vytvářet flexibilní a škálovatelné aplikace s jasným rozdělením odpovědností.