1

Disons que nous avons Foo en tant que AggregateRoot. Et il ya générique Foo s ainsi que EnhancedFoo s avec un certain nombre de propriétés étendues. Est-il acceptable d'exposer "Actions" sur une seule classe racine agrégée pour les propriétés génériques et améliorées et d'avoir une vérification de validation pour lancer une exception si l'action améliorée a été appelée sur un objet Foo non amélioré? Techniquement, AggregateRoot dans ce cas agrégera toutes les "Actions" possibles pour tous les types Foo pris en charge?Comment AggregateRoots agrège les types d'objets diffidents?

De toute évidence beaucoup dépend de la structure du domaine, mais je pense que cette situation hypothétique est assez commune. Question probablement basique mais je commence juste avec Aggregates/Roots.

mise à jour par rétroaction

Disons que nous avons Foo comme AggregateRoot. Et il y a générique Foo s ainsi que FlyableFoo s, SwimmableFoo s, etc. Ainsi, agrégats doivent « savoir » sur tous les comportements possibles (mouche, charlatan, natation) et l'exposer de façon appropriée à la fonctionnalité de service. Et si quelque chose s'appelle une raison qui n'est pas "supportée" par l'objet courant, Aggregate peut lancer une exception "Désolé, pingouin ne peut pas voler".

Répondre

2

Je ne pense pas que ce soit une bonne idée. Vous devriez essayer de garder un code propre en même temps que vous utilisez l'approche DDD. Donc, je vous recommande de respecter les principes SOLID lors du codage des Agrégats et d'essayer de favor composition over inheritance.

De même, lors de la conception d'agrégats, vous ne devriez pas penser à properties mais à l'état et au comportement. Ceci est plus important dans CQRS car vous n'interrogez pas les agrégats, vous n'avez aucun getters (et selon DDD vous n'avez aucun setters aussi bien que vous devriez nommer vos méthodes selon le langage omniprésent).

Vous pouvez utiliser l'héritage, mais vous devez vous assurer que le gain (réutilisation du code) est supérieur à ce que vous perdez (effort cognitif accru). Je ne le recommande pas.

Et si quelque chose est appelé une raison qui ne sont pas « pris en charge » par objet courant, agrégat peut lancer une exception « Désolé, pingouin ne peut pas voler ».

Ceci casserait le Liskov substitution principle.

+0

Ce n'est pas clair d'après ma question, mais j'utilise effectivement la composition. Aussi, au lieu de dire "Propriétés" j'aurais dû dire "Comportements". J'ai ajouté une mise à jour à ma question, veuillez vérifier. Aussi, merci d'avoir mentionné le diagramme "Composition sur héritage", c'était très utile! – Tenek

+0

@Tenek voir ma réponse mise à jour –