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í.