Ma politique est que, pour qu'un code global soit robuste, chaque objet A doit vérifier autant que possible, le plus tôt possible. Mais le « autant que possible » a besoin d'explication:
- La cohérence interne de chaque champ B en A (type, gamme dans le type, etc.) doit être vérifié par le type de champ B lui-même. Si c'est un champ primitif, ou une classe réutilisée, ce n'est pas possible, donc l'objet A devrait le vérifier.
- La cohérence des domaines connexes (si ce champ B est nul, alors C doit également être) est de la responsabilité typique de l'objet A.
- La cohérence d'un champ B avec d'autres codes qui sont externes à A est une autre question. C'est ici que l'approche "pojo" (en Java, mais applicable à n'importe quelle langue) entre en jeu.
L'approche POJO dit que toutes les responsabilités/préoccupations que nous avons dans les logiciels modernes (persistence & validation ne sont que deux d'entre eux), fin modèle de domaine par être désordonné et difficile à comprendre. Le problème est que ces objets de domaine sont essentiels à la compréhension de l'ensemble de l'application, à la communication avec les experts du domaine, etc.Chaque fois que vous devez lire un code d'objet de domaine, vous devez gérer la complexité de toutes ces préoccupations, alors que vous n'en avez aucun ...
Ainsi, dans l'approche POJO, les objets de votre domaine ne doivent pas porter code lié à l'une de ces préoccupations (qui porte généralement une interface à mettre en œuvre, ou une superclasse à avoir). Toutes les préoccupations sauf le domaine un sont hors de l'objet (mais certaines informations simples peuvent encore être fournies, en java généralement via Annotations, pour paramétrer le code externe générique qui gère un problème).
De plus, les objets de domaine se rapportent uniquement à d'autres objets de domaine, et non à certaines classes de structure liées à une préoccupation (telle que la validation ou la persistance). Ainsi, le modèle de domaine, avec toutes les classes, peut être placé dans un «paquet» séparé (projet ou autre), sans dépendance aux codes techniques ou liés aux préoccupations. Cela rend beaucoup plus facile de comprendre le cœur d'une application complexe, sans toute cette complexité de ces aspects secondaires.