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, ...
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
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
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
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
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
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