4
votes

Interface pour les cas d'utilisation (services d'application)?

Les cas d'utilisation ou les services d'application doivent-ils avoir des interfaces et des implémentations lorsqu'ils suivent une architecture hexagonale avec des principes ddd? Par exemple, le cas d'utilisation «supprimer une vidéo», devrait-il avoir IDeteVideo (interface) et DeletVideoImpl (implémentation) implémentant cette interface?

Si la réponse est oui, où devraient se trouver les interfaces des cas d'utilisation, dans la couche domaine ou dans la couche application? Il est évident que l'implémentation doit toujours se situer au niveau de la couche application.

Je pense que les cas d'utilisation ne sont pas quelque chose qui varie fréquemment, donc à mon avis je pense qu'il n'est pas nécessaire d'avoir une interface, avec l'implémentation cela suffirait. Mais en termes d'architecture hexagonale et de principes DDD, y a-t-il quelque chose à dire à ce sujet?

Merci d'avance.


1 commentaires

Une excellente question! Mais pourquoi est-il évident que l'implémentation doit toujours être au niveau de la couche application?


4 Réponses :


1
votes

Lors de l'implémentation de DDD en utilisant hex arch, les interfaces des services d'application sont les ports du pilote (la limite du cas d'utilisation, les bords gauches de l'hexagone).

L'intérieur de l'hexagone est divisé en deux parties: l'implémentation des services d'application et le domaine.


0 commentaires

4
votes

Les cas d'utilisation ou les services d'application doivent-ils avoir des interfaces et des implémentations lorsqu'ils suivent une architecture hexagonale avec des principes ddd?

En bref, vous n'avez généralement pas besoin d'interfaces sur les cas d'utilisation (également appelés interacteurs dans Clean Architecture) car vos adaptateurs principaux (client de votre hexagone) dépendent de l'hexagone par nature.

Attention, vous en avez toujours besoin lors de la création d'un adaptateur secondaire (composant extérieur utilisé par votre cas d'utilisation), car votre hexagone NE DOIT PAS dépendre d'adaptateurs secondaires.

MAIS, vous pourriez toujours avoir besoin d'une interface sur vos cas d'utilisation si:

  • Vous voulez pouvoir tester unitaire vos adaptateurs principaux (bien que considérés comme un objet modeste), où vous stub / mockeriez vos cas d'utilisation via son interface.

  • Vous voudrez peut-être essayer plusieurs alternatives pour des cas d'utilisation afin d'expérimenter, dans ce cas, cela agirait comme une abstraction significative.

Si la réponse est oui, où devraient être les interfaces des cas d'utilisation? Dans la couche domaine ou dans la couche application?

Il doit être placé à l'intérieur de l'hexagone, au niveau de la couche application, car chacune de ces interfaces définit un service d'application.


0 commentaires

6
votes

Je ne vois pas la nécessité d'avoir des interfaces pour vos services d'application. Comme ils orchestrent généralement des cas d'utilisation d'applications spécifiques, il ne doit pas y avoir d'implémentations différentes du même type de flux de travail. En outre, ils ne doivent pas avoir de dépendances avec l'infrastructure eux-mêmes, mais plutôt orchestrer le flux de travail des actions qui doivent se produire en appelant des opérations sur des référentiels, des services de domaine ou des agrégats.

Le plus important est de vous assurer que vos services applicatifs n'accèdent qu'aux interfaces plutôt qu'aux implémentations concrètes qui dépendent de l'infrastructure. Cela signifie que les services d'application ne devraient dépendre que des interfaces pour utiliser des référentiels ou des composants qui accèdent à une autre infrastructure (par exemple, un composant de service qui fait des demandes à des systèmes externes).

Cependant, s'il existe des interfaces pour vos services d'application (ou cas d'utilisation), ces interfaces doivent être définies dans la couche application. Il s'agit de la même règle que pour les interfaces de domaine (par exemple les interfaces de référentiel) qui doivent résider dans la couche de domaine.


0 commentaires

1
votes

Je pensais à la même chose. Comme vous n'avez qu'un seul cas d'utilisation par service d'application, vous n'avez pas besoin d'une interface. Cela vient de ma pratique avec différentes équipes dans lesquelles nous n'avions pas d'interface pour une seule implémentation. De plus, j'accepte que les interfaces de service d' application (si vous en avez) soient définies dans la couche application. Mais je les ai vus aussi dans la couche infrastructure.


0 commentaires