web-dev-qa-db-fra.com

Architecture d'oignon comparée à l'hexagonal

Est-ce qu'il y a une différence entre eux (oignon | hexagonal), si je comprends bien, ils sont identiques, ils se concentrent sur le domaine qui est au cœur de l'application et qui devrait être agnostique de technologie/cadre. 

Quelles sont les différences entre eux le cas échéant?

De plus, je ne vois aucun avantage réel à utiliser l'une sur l'autre ou même contre une architecture à N couches, si elle est mal suivie, il ne fera aucune différence que de la suivre.

Quels sont les avantages d'utiliser l'un sur l'autre et pourquoi vous l'utiliseriez? quand l'utiliser?

Merci

5
MCR

Quelles sont les différences entre eux le cas échéant?

Oignon: Il existe des calques, les dépendances étant toujours orientées vers l’intérieur, c’est-à-dire qu’un calque peut utiliser n’importe lequel des calques qu’il contient. La couche interne est un modèle de domaine et la couche externe est une infrastructure, mais le nombre de couches entre celles-ci peut varier.

Hexagonal (c'est un nom alternatif pour le nom d'origine "Ports & Adapters"): Il n'y a pas de couches. Vous avez l'application, les ports et les adaptateurs. Les ports appartiennent à l'application, ils sont les API/SPI de l'application. Les adaptateurs sont en dehors de l'application et chacun dépend d'un port de l'application.

Certaines personnes croient que lors de la mise en œuvre d'une architecture hexagonale, la plupart des gens ne mettent pas physiquement tous les adaptateurs dans un artefact, mais dans un seul artefact (comme la couche d'infrastructure). Et ils font également dépendre les adaptateurs de l’application entière, pas seulement du port qu’ils utilisent. Donc ce serait un oignon en fait.

L'implémentation d'un droit hexagonal devrait séparer les adaptateurs les uns des autres, et chaque adaptateur devrait dépendre uniquement du port utilisé/implémenté (selon que le port est pilote ou piloté).

Une autre différence est que Hexagonal ne dit rien sur la structure de l'intérieur de l'hexagone (l'application).

Quels sont les avantages d'utiliser l'un sur l'autre?

L'avantage d'hexagonal est qu'il est plus modulaire, vous avez une séparation claire des composants, empêchant la fuite de code entre eux. En revanche, l'oignon est plus dangereux dans la mesure où vous pouvez accéder par exemple à la base de données directement à partir de l'interface utilisateur (elles appartiennent toutes les deux au même calque).

L'avantage de l'oignon est dérivé de ce qui précède. Comme hexagonal comporte de nombreux artefacts, si le projet est volumineux, la construction de l’ensemble du projet devrait prendre beaucoup de temps.

Pourquoi l'utiliseriez-vous? quand l'utiliser?

En utilisant l'un ou l'autre, vous vous concentrez sur le vrai problème que vous essayez de résoudre, sans utiliser de technologie ou de cadre. L'application est agnostique sur le plan technologique et il est facile de migrer d'un cadre à un autre. Les deux d'entre eux sont appelés "propres" architectures à cause de cela. Vous avez votre noyau d'application libre de code-cadre, d'annotations, etc. 

Alors ... Pourquoi les utiliser?

Parce que vous améliorez la maintenabilité, la testabilité et votre code propre.

Quand les utiliser?

Je devrais plutôt dire quand ne pas les utiliser. Si l'application que vous développez n'est pas complexe, par exemple s'il s'agit simplement d'un CRUD, elle ne mérite peut-être pas de les utiliser.

Personnellement, j'aime bien "Ports et adaptateurs" par rapport aux autres.

J'espère que mon explication a aidé.

12
choquero70

Il y a une différence entre l'architecture en couches et la famille d'architectures liées à l'oignon. L'architecture en couches fonctionne avec une relation hiérarchique entre l'interface utilisateur et les couches d'accès aux données. En revanche, l'architecture de l'oignon considère que l'interface utilisateur et l'accès aux données font partie de la même couche.

Comment se fait-il que l'interface utilisateur et l'accès aux données se trouvent sur la même couche? Au cœur de l'architecture de l'oignon se trouve le domaine avec sa logique métier. C'est l'objectif principal. Le domaine n'est pas au-dessus ou au-dessous d'une autre couche. C'est le centre même. Les interfaces utilisateur, les noeuds finaux, etc., sont secondaires au domaine, tout comme les référentiels de données.

La architecture des ports et des adaptateurs (qui est un autre nom pour l'architecture hexagonale) le précise clairement: il existe un nombre quelconque de ports servant d'interfaces entre le domaine et l'extérieur. Les adaptateurs implémentent les ports afin que ceux-ci puissent interagir avec le domaine.

0
Markus Pscheidt