Aller au contenu principal

Services

Statut

Document de cadrage backend — version initiale.

Rôle

Les Services portent la logique métier principale.

Ils doivent éviter que les contrôleurs, jobs ou frontends contiennent des règles complexes. Un contrôleur doit recevoir la requête, valider, appeler un service et retourner une réponse.

État actuel visible

Des services existent dans la plupart des modules :

  • ActeurReadService, ActeurWriteService ;
  • services Admin ;
  • services Analytics ;
  • services AssoSuite ;
  • services Chat ;
  • services Community ;
  • services Identity ;
  • services Mairie ;
  • services Monetization ;
  • services PlayLoop ;
  • services Publication ;
  • services Settings ;
  • services Territory.

Responsabilités

Un service peut :

  • lire ou écrire des données métier ;
  • appliquer des règles de domaine ;
  • filtrer les champs autorisés ;
  • orchestrer plusieurs modèles ;
  • retourner un DTO ;
  • déclencher un job ;
  • préparer une réponse pour un contrôleur ;
  • préparer un contexte pour un service transverse cible.

Exemple de convention

final class ExempleWriteService
{
public function create(array $data): ExempleDTO
{
// règles métier, écriture, retour DTO
}
}

Services de lecture et d'écriture

La séparation ReadService / WriteService est visible dans plusieurs modules.

Elle est utile quand :

  • les lectures publiques sont nombreuses ;
  • les règles d'écriture sont plus sensibles ;
  • les performances et filtres divergent ;
  • les tests peuvent être séparés.

Règles cible

  • Garder les services centrés sur un domaine.
  • Ne pas mélanger logique HTTP et logique métier.
  • Ne pas exposer de données sensibles dans les DTOs.
  • Écrire des tests sur les règles importantes.
  • Préférer un service explicite à une logique dupliquée dans plusieurs contrôleurs.

Points à clarifier

  • Quand introduire des Actions en plus des Services.
  • Niveau de granularité attendu par service.
  • Gestion des transactions dans les services.
  • Conventions pour retours : DTO, array, model ou resource.