Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Atelier : Construire un monolithe en DDD avec u...

Atelier : Construire un monolithe en DDD avec une équipe craft

Support de l'atelier du meetup Sofware Crafters du 17 avril 2018

Nicolas Le Nardou

April 17, 2018
Tweet

More Decks by Nicolas Le Nardou

Other Decks in Programming

Transcript

  1. Contexte Equipe craft PHP Noyau dur a 4-5 ans de

    vie commune Logiciels qui vivent et sont maintenus longtemps (DSI puis éditeur)
  2. Contexte Veille techno, conférences, meetup, … Cheminement “personnel” “Chemin aussi

    important que la destination” Essayons régulièrement de rattacher nos trouvailles/évolutions à l’état de l’art
  3. Contexte Amélioration continue comme moteur : Difficulté → Solution Etape

    après étape, depuis 5 ans La “Bataille des arguments”
  4. Contexte Chez nous, on croit en : la conception, la

    lisibilité, l’expressivité, la sémantique, les tests, l’automatisation, l’intelligence collective, les interfaces, les interfaces, les interfaces, ... On ne croit pas en : les ORMs, la magie, coder en yaml, les astuces techniques, les setters, … On fait attention avec : DRY, KISS, le dernier framework à la mode, ...
  5. Liste des concepts 1 - CQS 2 - Value objects

    3 - Repository 4 - Collections nommées 5 - Couches
  6. CQS Points clés Query ≈ Read only (ne modifie rien)

    Command ≈ Write only (ne renvoie rien) Query / Command = objets immutables On associe un handler à chaque query et chaque commande On émet les C/Q sur un bus
  7. CQS + - Découplage / Réutilisabilité / Testabilité Découplage fort

    avec l’UI Notion d’ “intention utilisateur” Bye bye les “fat controllers” Logs / Debug CQRS ready Idéal pour la rédaction de tests fonctionnels Génère du code boilerplate “Plomberie” dans le container d’injection Command tracker
  8. CQS

  9. + - Sémantique Lutte contre le “primitive obsession” Lisibilité des

    classes les utilisant très expressif pas de pollution (validation, cas aux limites, …) Protection contre les effets de bords Les méthodes utilitaires ont enfin trouvé leur place Protection contre les opérations du type primitif qui n’ont pas de sens Périmètre d’impact restreint en cas de refactor Génère du code boilerplate Sentiment “overkill” sur les plus triviaux Décourageant quand il faut en faire plusieurs d’un coup (détourne l’attention) Alourdit les tests unitaires des classes les utilisant Conversion aux frontières de l’application persistance, json, contrôleurs, librairies tierces, … Value object
  10. Repository Points clés Abstraction des moteurs de stockage Interface du

    domain Implémentation dans l’infrastructure
  11. Repository + - Découplage réel Fini les développements “DB centric”

    Testabilité Implémentation mémoire Autorise le multi-moteurs Relationnel, orienté document, clé/valeur, ... Utilisation avancée possible des moteurs de stockage Bye bye les auto-incréments “Plomberie” via les DTO
  12. Collections nommées + - Sémantique Lutte contre le “primitive obsession”

    Lisibilité des classes utilisatrices Limite le code boilerplate (validation, …) Duplication de code Duplication des TU Pas de support des “generics” en PHP Ne permets pas d’utiliser directement toutes les fonctions de manipulation des array
  13. Architecture en couches + - Permets de développer en “bottom-top”

    Y compris lors des gros refactors Garde fou au quotidien La violation de couche est un nouveau code smell Facile de détecter les violations Script qui analyse les namespaces Code coverage à 100% sur les couches Domain & Application