UseCase
Un useCase est une fonction de la couche application qui matérialise une demande métier. Chaque useCase correspond à une action métier spécifique et contient la logique nécessaire à son exécution.
Exemple
Fonctionnement
C.createUseCase(...) retourne un handler de use case.
L'idée est de séparer deux choses :
- la déclaration du use case : ses dépendances (repositories et/ou autres use cases) + la factory qui construit la fonction finale
- l'instanciation du use case : fournir les implémentations concrètes des repositories (infrastructure) pour obtenir la fonction exécutable
Un UseCase peut dépendre d'un autre UseCaseHandler. Dans ce cas, l'instanciation est gérée automatiquement : getUseCase(...) résout les sous-use-cases à partir du même objet repositories.
Créer un UseCase
Créer un use case, c'est définir :
- ses dépendances (repositories et/ou use cases)
- une factory qui reçoit ces dépendances instanciées et retourne la fonction du use case
Instancier un UseCase
Pour obtenir la fonction exécutable, appelez :
useCaseHandler.getUseCase({ ...repositories })
Ce pattern facilite l'injection, le test, et permet de garder la couche application indépendante des détails d'infrastructure.
Instancier plusieurs UseCase (C.useCaseInstances)
Quand vous avez plusieurs use cases à instancier, C.useCaseInstances(...) évite de répéter getUseCase(...) partout.
Il prend :
- un objet
{ key: useCaseHandler } - un objet
{ key: repositoryImplementation }
Et retourne :
- un objet
{ key: useCaseFunction }(mêmes clés que l'objet de départ)
useCaseInstances supporte aussi les dépendances de type UseCaseHandler : les sous-use-cases sont instanciés automatiquement à partir du même objet de repositories.
Méthodes et Propriétés
Un UseCaseHandler expose :
Méthodes
getUseCase()
Instancie la fonction du use case à partir des implémentations de repositories.
function getUseCase(
repositories: Repositories
): UseCasePropriétés
dependencies
La définition des dépendances (handlers de repositories et/ou de use cases).
