L’archi Hexa est-ce archi bien❓

:emoji_intro_qui_existe_pas: Introduction :

📚 Définition :

  • notre modèle
  • le système qui appelle et manipule notre modèle
  • les services externes dont peut avoir besoin notre application
  • Domain qui contient notre modèle, les ports/interfaces pour manipuler nos données, les exceptions lié au domain et les handlers.
  • Application qui contient la porte d’entrée de notre application, c’est depuis cette partie qu’on executera les différentes actions de notre application
  • Infrastructure qui contient les services externes dont notre application peut avoir besoin pour fonctionner

💻 Let’s code

  • 1️⃣ Mon handler prend 1 objet CreateAUserInput en paramètre, il ignore donc complètement le contexte dans lequel il est appelé, ça peut être 1 requête HTTP comme dans notre exemple, mais ça peut aussi être un simple test unitaire ou bien même un script bash…
  • 2️⃣ J’utilise l’inversion de dépendance pour enregistrer mon User via UserRepositoryInterface, mon handler n’a donc aucune idée de l’implémentation concrète du repository qui enregistrerera mon User (ça peut être une base de donnée, un call API vers elasticsearch, dans un tableau PHP pour faire des tests…)
  • 3️⃣ Je retourne un simple objet qui transporte des informations, libre à la personne qui utilise le handler de les utiliser.
  • 4️⃣ J’ai mis la logique dans le namespace Domain mais il y a discussion car il y a des avis pour le mettre dans le namespace Application

👣 Sortir du CRUD classique

  • Le développement est standardisé (on se pose pas 36 questions sur l’implémentation) 🎯
  • Review plus simple a analyser, on sait qui fait quoi et donc on se focus sur ce qui nous importe réellement, la logique métier 🤑
  • Plus facile a debug et à corriger 🐛
  • Plus simple à tester ✅
  • Plus simple à maintenir 🕸
  • Code plus stable car on ne dépens pas de contexte ⛷
  • L’utilisation de ports rend le code facilement réutilisable, il suffit de respecter le contrat ✂️
  • Les dépendances externes sont facilement interchangeables 🔁
  • Code plus lisible et donc l’onboarding est facilité 💡
  • La redondance de classe 🗣
  • La nécessité d’utiliser une librairie pour l’injection de dépendance sinon c’est ingérable 🥋
  • La plupart des applications web ne changent pas de framework ou de base de données, faut-il anticiper quelque chose qui n’arrivera pas❓
  • Beaucoup de classe intermédiaires, faut parfois tirer lonnnnnngtemps le fil pour arriver au Handler 🧶
  • L’architecture hexagonale ne vous garantit pas de faire du clean code 🧤
  • Le manque de “liberté” dans l’implémentation peut provoquer une certaine lassitude 😅

🏔 Comment s’y mettre ?

📖 Pour poursuivre sur l’architecture hexagonale

--

--

Fullstack Developer- certified Symfony 4,5 and certified AWS Solution Architect - Freelancer - Remote Worker

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Smaine Milianni

Smaine Milianni

429 Followers

Fullstack Developer- certified Symfony 4,5 and certified AWS Solution Architect - Freelancer - Remote Worker