Skip to content

Instantly share code, notes, and snippets.

@sroccaserra
Last active June 8, 2017 09:00
Show Gist options
  • Save sroccaserra/707c78573dc2a4d1b932ab936ad75f9e to your computer and use it in GitHub Desktop.
Save sroccaserra/707c78573dc2a4d1b932ab936ad75f9e to your computer and use it in GitHub Desktop.

Coder sans peur du changement, avec la "même pas mal !" architecture hexagonale

Par @cyriux & @tpierrain.


Deux axes de symétrie, un axe "API" | "SPI", et un axe "Verify behavior in tests" | "Deliver value to prod".

  • API, Application Provider Interface = "They need me"
  • SPI, Service Provider Interface = "I need them"

"Verify behavior in tests" et "Deliver value to prod" : les deux sont équivalent du point de vue de l'hexagone (du domaine), on ne fait pas de code spécifique pour l'un ou pour l'autre (les mêmes points d'entrée, les mêmes portes). Un robot de test n'est qu'un client / consommateur comme un autre, et un mock n'est qu'un fournisseur de services comme un autre.

"Beware of modelism!", on ne code pas le modèle pour être réaliste avec tout ce qu'il pourrait y avoir dans le modèle IRL, on va juste s'arrêter à ce dont on a besoin. Faire un modèle utile, pas réaliste mais utile, drivé par nos use cases.

Dessiner la DIP :

  • non [Account -]-x-[-> SPI]
  • oui [Account -> Interface <-]---[- Adapter SPI]

Pattern repository : bien nommer l'interface avec un nom de domaine, par exemple CatalogueDeBonbons et pas BonbonRepository.

  • Côté API, c'est assez facile parce-qu'on appelle et on dépend dans le même sens.

  • Ça suppose que notre domaine a suffisament de matière pour être intéressant en lui-même, qu'il mérite de l'attention, qu'il mérite d'être grossi même sans l'infra. Si votre projet c'est juste un projet d'infra, de connectique, de plomberie entre applications, et qu'il n'y a pas vraiment de métier dedans, c'est pas pertinent.

  • Port = Techno existante

  • Adapter = Notre code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment