L’article explique pourquoi les architectures CRUD (Create, Read, Update, Delete) compliquent les tests unitaires et augmentent la charge cognitive des développeurs. L’auteur souligne que la logique métier, dispersée dans des contrôleurs, services, FormType ou événements Doctrine, devient difficile à identifier et à tester, favorisant la duplication de code et les erreurs. Les modifications nécessitent de comprendre des interactions complexes, ralentissant le développement et augmentant le risque de régressions.
L’auteur illustre ce problème avec des exemples concrets en Symfony, où des règles métiers se cachent dans des couches techniques variées (validations dans les formulaires, effets de bord dans les écouteurs Doctrine). Cette dispersion empêche une couverture de test efficace, car les tests doivent souvent simuler des dépendances externes (bases de données, envoi d’emails) plutôt que de se concentrer sur la logique pure.
Enfin, l’article critique l’illusion des services génériques, qui masquent la complexité sans résoudre le problème de fond. La solution proposée est de distinguer clairement les contrats d’entrée (validation des données) des invariants métiers (règles de transition), afin de structurer le code de manière plus testable et maintenable.
Florent Destremau discute de l'utilisation des DTO (Data Transfer Objects) dans les formulaires, soulignant que leur utilisation est souvent présentée comme une évidence sans considérer le contexte et le coût de maintenance. Il illustre cela avec un exemple simple où l'ajout d'un DTO et d'un service de mapping pour une entité basique crée une sur-complexité et une duplication de code. Il argue que pour des opérations CRUD simples, les DTO n'apportent que peu de valeur et recommande plutôt d'écrire des tests pour protéger le code. Il montre comment déplacer les contraintes de validation sur l'entité et utiliser du typage strict peut simplifier le code tout en maintenant une bonne robustesse. Il conclut que cette approche résulte en un couplage plus souple et une couverture de test accrue, malgré une perception initiale de moins de rigueur.
Tout est dans le titre
Tout est dans le titre
L'auteur passe en revue l'installation de Symfony, la configuration d'un Docker, la création d'un CRUD pour une entité, les tests unitaires, l'utilisation de Encore pour la gestion du front end, l'enregistrement en base de données des données de session, et la configuration de Symfony lorsque l'application est derrière un load balancer... Très complet donc :-)
Tout est dans le titre
Tout est dans le titre - à noter la possibilité de lancer des requêtes Doctrine avec bin/console doctrine:query:sql
Tout est dans le titre
Tout est dans le titre
Tout est dans le titre, ça s'intègre bien avec Symfony2
Le code obtenu par les "générateurs automatiques" de Symfony2 peut être très verbeux (voire "sale") : l'auteur prend en exemple le générateur de CRUD et montre comment un refactoring peut nettement alléger le résultat
5e article sur les couches de service en PHP : ajout d'un "mapper" pour lancer des opérations CRUD sur les entités utilisateur et pour retourner ces objets du domaine au format XML
Série de tutoriels sur les couches de service en PHP : 1er tuto - mise en place d'une application web, consommant un service pour réaliser des opérations CRUD sur un modèle de domaines composé de quelques entités utilisateurs