architecture "hexagonale"

11
Mes observations à propos de l'architecture “propre/hexagonale” http://thegreenbar.wordpress.com/

Upload: arotech

Post on 26-Jan-2017

367 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Architecture "Hexagonale"

Mes observations à propos de l'architecture

“propre/hexagonale”http://thegreenbar.wordpress.com/

Page 2: Architecture "Hexagonale"

Motivation

Robert C. Martin : http://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html

Cyril Martraire : https://www.parleys.com/tutorial/coder-sans-peur-du-changement-avec-la-meme-pas-mal-architecture-hexagonale

Page 3: Architecture "Hexagonale"

L'architecture hexagonal en 30 secondes

Code métier (domain) séparé du code de l'infrastructure

Dépendances à sens unique (de l'infrastructure vers le métier)

Le code infra appelle des API métier (“ports”) et implémente des interfaces métier (“adapters”)

Page 4: Architecture "Hexagonale"

Mon approche

Page 5: Architecture "Hexagonale"

Patterns Utiles

CRUD: Service (domain) → Stockage (infra)Tests avec mocks au niveau service, avec une

vraie base de données au niveau stockageTests dans AbstractXXXStorageTest (domain)

avec setUp() dans sous-classe PostgresXXXStorageTest

Controlleur de session (infra?)

Page 6: Architecture "Hexagonale"

Patterns Utiles

Page 7: Architecture "Hexagonale"

Difficultés rencontrées et limitations

Logging (infra ou domain?) Extraire des composants de bas niveau (dépendances

métier à démêler) Interdiction des annotations Java EE dans le code métier Zones de gris (ex: controlleur – métier ou infra?) Même le choix du langage (Java, pour mon cas) impose

certains choix d'infrastructure pour la partie métier.

Page 8: Architecture "Hexagonale"

Points positifs

Facile de remplacer un élément infra (ex: remplacer Postgres par MongoDb, sans changer le code métier et sans ré-écrire les tests)

Code plus propre (code métier non-pollué par le code de l'infrastructure)

Possibilité de décaler les décisions sur l'infrastructure Plus facile de réutiliser le code métier dans d'autres projets Développement infra dirigé par les cas d'utilisation métier

(YAGNI) Facilite IoC et DI → code plus propre

Page 9: Architecture "Hexagonale"

Points négatifs

Difficile de tirer à max les avantages des frameworks – ex: pas d'annotations Java EE, Spring ou ORM dans le code métier.

Ne peut pas optimiser le code métier pour une infrastructure spécifique.

Un changement dans la logique métier peut toucher plusieurs endroits dans le code infra.

Complexité et redondance dans le TDD – un cas d'utilisation doit être testé à plusieurs endroits pour arriver de bout en bout.

Page 10: Architecture "Hexagonale"

Hexagonal et Microservices

Pas la même chose Hexagonal: découpage entre métier et

infra Microservices: découpage du métier en

morceaux Selon Martin Fowler, pas faisable de démarrer un projet

en microservices du début – besoin de créer une appli complèxe et le découper petit à petit

Donc le passage Hexagonal → Microservices a l'avantage d'une séparation du métier et infra pour plus facilement découper le métier.

Page 11: Architecture "Hexagonale"

Conclusion

La séparation entre métier et infra réduit la complexité “accidentelle”

Une bonne approche pour la plupart des projets de dev, sauf si:

tout petit projet Prototype jetable Besoin fort d'optimiser pour une

infrastructure spécifique