2010-02-16 20 views
9

Puisqu'il n'y a pas de respositories pour les objets de valeur. Comment puis-je charger tous les objets de valeur?Comment les objets de valeur sont sauvegardés et chargés?

Supposons que nous modélisons une application de blog et nous avons ce cours:

  • Post (entité)
  • Commentaire (objet de valeur)
  • Tag (objet de valeur)
  • PostsRespository (Respository

Je sais que lorsque je sauvegarde un nouveau message, ses balises sont enregistrées dans la même table. Mais comment pourrais-je charger tous les tags de tous les messages. PostsRespository doit-il avoir une méthode pour charger tous les tags? Je le fais habituellement, mais je veux connaître d'autres opinions

Répondre

8

Je suis à la recherche d'une meilleure solution pour cette question et j'ai trouvé ce post:

http://gojko.net/2009/09/30/ddd-and-relational-databases-the-value-object-dilemma/

Ce message explique très bien pourquoi il y a beaucoup de confusion avec des objets de valeur et des bases de données. Ici, vous êtes phrase qui me plaisait trop: «La persistance est pas une excuse pour mettre tout à des entités »

Gojko Adzic, donnez-nous trois pour essayer de sauver nos objets de valeur .

+0

Les bases de données relationnelles et ORM nous trompent souvent dans la création d'entités accidentelles http://www.jefclaes.be/2013/05/accidental-entities-you-dont-need-that.html – JefClaes

+0

merci pour le lien – yeraycaballero

+0

@yeraycaballero Si je sauvegarde objet de valeur dans une colonne de texte (option 3), comment dois-je faire pour effectuer une mise à jour atomique sur l'objet valeur? –

3

Je travaille actuellement sur un exemple similaire. Une fois que vous avez besoin de se référer uniquement aux étiquettes, ils ne sont plus des objets de valeur simple et peuvent continuer à croître en complexité. J'ai décidé de faire d'eux leurs propres entités et de créer un référentiel séparé pour les récupérer. Dans la plupart des scénarios, ils sont chargés ou enregistrés avec la publication, mais lorsqu'ils sont requis seuls, l'autre référentiel est utilisé.

J'espère que cela aide.

EDIT: En partie grâce à ce post, j'ai décidé de restructurer mon application légèrement. Vous avez raison de dire que je faisais probablement des balises une entité. Depuis, j'ai modifié mon application pour que les tags ne soient que des chaînes et que le référentiel post gère toutes les exigences de stockage autour des tags. Pour les opérations nécessitant des publications, les étiquettes sont chargées avec. Pour toute opération nécessitant uniquement des balises ou des listes de balises, le référentiel dispose de méthodes pour cela.

+0

Merci pour la réponse. Donc vous avez un TagsRepository. Avez-vous une table Tags dans la base de données aussi? – yeraycaballero

+0

Je n'ai pas encore décidé de la base de données. Je n'aurai probablement pas de base de données séparée et je suis fortement en train d'envisager une solution de base de données d'objets ou de documents comme mongo ou canapé. – smaclell

0

Voici comment je peux résoudre ce type de problème dans la façon dont je pratique actuellement DDD. Si vous modifiez quelque chose qui nécessite l'ajout et la suppression de balises, comme par exemple un Post, alors les balises peuvent être des entités, mais elles peuvent être des objets de valeur et sont chargées et sauvegardées avec le message de toute façon. Personnellement, j'ai tendance à privilégier les objets de valeur sauf si l'objet doit être modifié mais je réalise qu'il y a une différence entre l'objet entité modélisé en tant que "instantanés" en lecture seule et les objets valeur réelle sans identité. La partie délicate est que peut-être parfois ce que vous pourriez normalement considérer comme une clé pourrait faire partie d'un objet de valeur tant qu'il n'est pas utilisé comme identité dans ce contexte et je pense que les tags entrent dans cette catégorie.Si vous modifiez les balises elles-mêmes, il s'agit probablement d'un contexte délimité distinct ou d'un agrégat distinct dans lequel les balises sont elles-mêmes la racine agrégée et persistent dans un référentiel. Notez que la classe d'entité qui représente les balises dans ce contexte ne doit pas nécessairement être la même classe d'entité pour les balises utilisées dans Postagrégat.

Si votre annonce est disponible à l'écran à des fins de lecture uniquement, par exemple pour fournir une liste de sélection, alors c'est probablement une liste d'objets de valeur. Ces objets de valeur ne peuvent pas nécessairement figurer dans le modèle de domaine car ils concernent principalement la prise en charge de l'interface utilisateur et non le domaine réel.

S'il vous plaît chime dedans si quelqu'un a des idées sur la raison pour laquelle mon avis sur ce pourrait être faux, mais c'est la façon dont je l'ai fait.