Sobes.tech
Senior

Racontez un cas d'utilisation des interfaces dans la logique de production du point de vue de l'architecture

sobes.tech IA

Réponse de l'IA

Dans la logique de production en Go, les interfaces sont souvent utilisées pour atteindre une faible dépendance entre les composants et faciliter les tests.

Par exemple, dans l'architecture de l'application, vous pouvez définir une interface pour la couche d'accès aux données:

// UserRepository décrit les méthodes pour travailler avec les utilisateurs
type UserRepository interface {
    GetUserByID(id int) (*User, error)
    SaveUser(user *User) error
}

Dans la logique métier (couche de service), nous acceptons cette interface, sans dépendre d'une implémentation concrète (par exemple, base de données ou mock pour les tests):

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
    }
    // logique supplémentaire
    return &UserProfile{User: user}, nil
}

Une telle approche permet:

  • De changer facilement l'implémentation du référentiel (par exemple, basculer entre différentes bases de données ou utiliser un mock pour les tests).
  • D'isoler la logique métier des détails de stockage des données.
  • D'améliorer la lisibilité et la maintenance du code.

En production, cela aide à créer des applications flexibles et évolutives avec une séparation claire des responsabilités.