2012-10-02 2 views
0

Je vérifie le code de Sharp Architecture. Jusqu'à présent, c'est cool, mais j'ai de la difficulté à comprendre comment implémenter des objets de valeur DDD dans le framework (cela ne semble pas être le cas dans le code). Je suppose que la base Entity et la base Repository ne doivent être utilisées que pour les entités. Des idées sur la façon d'implémenter des objets de valeur dans le cadre?Objets de valeur d'architecture Sharp

Répondre

0

Dans Sharp Arch, il existe une classe ValueObject dans l'espace de noms SharpArch.Domain.DomainModel. Cet objet hérite de BaseObject et remplace les opérateurs == et! = Et les méthodes Equals() et GetHashCode(). Les substitutions de méthodes appellent simplement les versions BaseObject de ces deux méthodes qui à leur tour utilisent la méthode GetTypeSpecificSignatureProperties() pour obtenir les propriétés à utiliser dans la comparaison d'égalité.

Bottom line est que l'égalité de l'entité est déterminée par

  1. égalité de référence
  2. même type?
  3. id sont les mêmes
  4. Comparaison de toutes les propriétés décorées avec [DomainSignature] attribut

Pour ValueObjects, la méthode BaseObject de Égal est utilisé

  1. égalité Référence
  2. même type?
  3. Comparer toutes les propriétés publiques

Ceci est un peu simplifié, je vous suggère le dernier code de github et lisez le code dans les 3 classes mentionnées vous.

Éditer: En ce qui concerne la persistance, this SO question pourrait aider. Autre que cela, référez-vous à la documentation officielle NH et Fluent NH

1

Les objets de valeur sont des objets simples qui ne nécessitent pas de classe de base. (La seule raison pour laquelle les entités ont des classes de base est de fournir une égalité basée sur l'identité). Implémenter un objet valeur signifie simplement créer une classe pour représenter une valeur de votre domaine. Un grand nombre de fois les objets de valeur doivent être immuables et fournir des méthodes de comparaison d'égalité pour déterminer l'égalité avec d'autres objets de valeur du même type. Jetez un oeil here.

+0

Donc, si je vous ai bien compris, un objet de valeur dans le contexte de Sharp Architecture serait simplement un objet POCO ne héritant de rien? Même ainsi, dans mon mécanisme de persistance, il peut être représenté par une table séparée, non? Mais comment puis-je lier entre ma classe d'objets de valeur et ma base de données? –