Assurez-vous de lire les commentaires récents de l'oncle Bob sur le rôle du design dans TDD .
La conception basée sur le domaine implique de nombreux modèles techniques, définissant des couches bien établies comme la couche Application, la couche Infrastructure, la couche Domaine, la couche Persistance.
Udi Dahan: "Dieu, je déteste la superposition." Il passe un peu de temps à en discuter dans son discours CQRS - mais différent (la superposition commence à 18h30)
J'écrirais votre phrase légèrement différemment; "DDD reconnaît qu'il existe un certain nombre de problèmes communs à la plupart des applications d'entreprise et que les solutions à ces problèmes ont des durées de vie différentes" .
Par exemple, les problèmes de domaine, en règle générale, doivent être flexibles - en particulier lorsque vous personnalisez une solution pour une entreprise particulière. Après tout, le domaine concerne la façon dont l'entreprise fait des affaires, c'est-à-dire comment l'entreprise gagne de l'argent et être en mesure d'apporter rapidement des améliorations commerciales est un revenu gratuit.
D'un autre côté, vous n'avez probablement pas besoin de changer souvent le composant de persistance. La solution de base de données qui fonctionnait avec la dernière version fonctionnera probablement également avec cette version.
Les problèmes d'application sont quelque part au milieu; ils ont tendance à être stables afin que les utilisateurs n'aient pas besoin d'apprendre une nouvelle application à chaque version.
En outre, il peut y avoir plusieurs implémentations pour résoudre un problème donné. Par exemple, l'application peut n'avoir besoin que d'un instantané de son état actuel - il suffit d'enregistrer un fichier sur le disque. Et dans vos premières itérations, cela peut aussi être tout ce dont le domaine a besoin. Mais finalement, une histoire appelle la prise en charge de requêtes ad hoc, et vous reconnaissez que la configuration d'une base de données relationnelle sera beaucoup plus facile que de l'implémenter à partir de zéro. Et puis il y a cette fonctionnalité qui fonctionnerait mieux dans une base de données de graphiques.
Pendant ce temps, le CTO veut une version de l'application qui fonctionne sur son téléphone; le PDG vient d'entendre un gars dire que la publication d'une API est la grande chose.
De plus, l'équipe commerciale utilise un modèle différent, alors donnez-nous la même application, avec un modèle différent. Oh, mais nous voyageons beaucoup, donc notre version doit fonctionner lorsque nous sommes hors ligne et se synchroniser plus tard ...
En d'autres termes, vous appliquez les modèles tactiques de ddd non pas en implémentant des espaces réservés vides et en supposant qu'ils seront remplis plus tard, mais plutôt en reconnaissant lorsque vous traversez les flux "Hé, c'est du code de persistance dans mon modèle de domaine, je ne dois pas être refactoring terminé. "