Bonjour,
Ca fait beaucoup de choses dans le titre, vous me direz si ça vaut le coup de faire d'autres sujets plus précis.
Premièrement, après le Meetup DDD récemment, j'ai changé ma façon de voir les choses.
Au départ, je croyais que faire du DDD, c'était faire "bien de l'objet", car les notions d'entité/identité/value objects/etc. me rappellent les cours d'objet/UML à l'école. De même, dans la démarche de "modéliser un système", UML est un outil, mais on apprenait aussi à faire un glossaire pour bien comprendre le métier (rendre explicite l'implicite).
Mais j'essaye de faire un rapprochement entre le DDD et le code, alors que le Mapping n'est pas 1:1 : je comprend maintenant que le DDD est une méthode de conception, peut importe le langage ou les Designs patterns.
Ca porte à confusion car les Entities/Value Objects/Aggregate Roots/etc. ça resemble à un design pattern.
Maintenant, je veux modéliser mon métier en DDD. Je peux le faire en Java ou en .Net, mais ces langages ne sont pas porteurs des notions de DDD.
Comment différencier un Value Object d'une Entity, alors que les 2 seront des "class" ?
Certes, on peut différencier les 2 par la manière d'implémenter... mais dans tous les cas, le langage de programmation perd l'information du DDD.
Du coup, j'imagine la modélisation DDD comme un espèce de diagramme UML. C'est d'ailleurs avec des schémas que je représente mon métier (qui ne sont pas strictement UML).
Mais on peut aussi imaginer une DSL pour décrire le modèle: avoir une DSL DDD pourrait porter les informations spécifiques au DDD, et peut ensuite générer une implémentation suivant le langage qu'on désire (ou pas, car on souhaite maitriser l'implémentation).
Une DSL serait pour moi un moyen de communiquer avec le métier.
Je n'ai pas trouvé cette DSL (j'en ai trouvé, mais elles portent sur CQRS qui n'a rien à voir).
Est-ce que l'idée est bonne? Non? Pourquoi? Comment faites-vous pour modéliser un système? Directement par code? Ou d'abords par schéma?
Une fois que j'ai bien modélisé mon métier avec des classes "pures" (sans annotations techniques etc.) je me retrouve à vouloir les persister.
En effet, je pourrais faire de l'EventSourcing, mais je ne le souhaite pas dans mon cas.
De plus, je dépend d'une base de données existante... ce qui arrive fréquemment sur "les projets de la vrai vie".
Ou alors, je commence avec une base vierge, mais les bases relationnels ne sont pas très adapté à mon modèle objet (les ORMs c'est bien, mais ça peut avoir ses limites).
Dans tous les cas, je vais me retrouver avec des contraintes techniques, mais je ne souhaite pas impacter mon modèle métier pour autant.
(Je me souviens que vous disiez que même des annotations JPA ça ne devrait pas être dans le modèle, ce que je comprend tout à fait).
Je retrouve ce type de problème aussi quand je souhaite avoir un modèle spécifique pour des DTO pour un service REST, ou SOAP, ou pour le modèle MVC, etc.
J'ai donc l'impression que je dois faire encore un autre modèle, celui de la persistance, et faire mon mapping avec le modèle métier.
Comment faites-vous cela? Est-ce que vous dupliquer plusieurs modèles, avec du Mapping Object:Object ? Est-ce que vous persistez le modèle "en binaire" ou sous une autre forme (base Document? EventSourcing?) ? Mais alors, pour requêter depuis une interface, dupliquez-vous la persistance dans une autre base ?
Merci par avance pour vos retours d'expérience :)