Cet article de Sebastian Bergmann explique les différences entre les Data Transfer Objects (DTOs) et les Value Objects, et pourquoi l'immutabilité facilite les tests. Les DTOs, motivés techniquement, servent à transférer des données entre couches ou systèmes, tandis que les Value Objects, motivés par le domaine, représentent des concepts stables du domaine. L'immutabilité réduit la charge cognitive en test, car elle garantit que l'état des objets ne change pas. Les Value Objects, étant immuables, n'ont pas besoin de test doubles, contrairement aux DTOs qui peuvent en nécessiter si ils contiennent de la logique. L'utilisation d'objets immuables simplifie les tests en évitant les effets de bord indirects.
L'article explique pourquoi privilégier l’immuabilité en programmation orientée objet permet d’éviter des bugs subtils liés à l’état partagé. L’auteur illustre le problème avec un exemple en PHP où la mutation d’un objet DateTime affecte involontairement une autre partie du code, rendant le débogage difficile. Les objets immuables (comme DateTimeImmutable) évitent ce genre de piège en retournant une nouvelle instance à chaque modification, plutôt que de modifier l’original. Les avantages incluent une meilleure prévisibilité du code, une réduction des effets de bord et une gestion plus sûre de la concurrence. Cependant, l’immuabilité peut introduire un surcoût en performance et n’est pas toujours adaptée (ex. : objets builders éphémères). L’article conclut en encourageant à adopter l’immuabilité par défaut, sauf besoin contraire, pour un code plus robuste et maintenable.
Tout est dans le titre
Tout est dans le titre
Tout est dans le titre