La balise SO est probablement une entité. Les tags peuvent être créés, fusionnés, supprimés et renommés. Il y a des fonctionnalités comme 'tags similaires', tags de l'utilisateur, etc. Certaines de ces fonctions, en particulier le cycle de vie, nécessiteront une identité. Exemple DDD classique où Personne qui change de nom est toujours la même personne, la même identité. La même chose avec des balises où l'utilisateur peut décider de renommer "domain-driven-design" en "DDD" et ce sera toujours la même chose. Les balises ont également besoin d'attributs supplémentaires comme tag.Id
, tag.Name
, tag.CreatedOn
, tag.CreatedBy
, tag.Locked
etc. Il y aurait probablement un référentiel de balises correspondant qui pourrait appliquer la règle d'unicité du nom. Pour résumer, la balise SO n'est pas un objet de valeur DDD car elle est modifiable et a un cycle de vie. Plus important encore, Tag n'est pas seulement une caractéristique d'une question (c'est ce que je pense a été négligé par d'autres réponses). Il participe à beaucoup plus de relations que cela. En d'autres termes, Tag est plus que juste une somme de ses attributs, il a également «identité conceptuelle». D'un autre côté TagName est un parfait exemple de Value Object. Son seul but dans la vie est de décrire une autre entité (Tag). TagName n'est rien de plus qu'une chaîne qui peut avoir quelques règles intégrées comme la longueur maximale et la comparaison insensible à la casse. Il peut également être judicieux d'utiliser simplement String à la place.
code
qui affiche des questions peuvent utiliser quelque chose comme ceci:
IList<TagName> tags = question.GetTags();
code
que la question des balises peut ressembler à ceci:
void TagQuestion(Question q, TagName tagName) {
Tag tag = _tagsRepository.FindByName(tagName);
if (tag == null) {
tag = CreateNewTag(/* capture creator, date, other rules*/);
}
q.AddTag(tag);
}
Merci. Je n'aurais pas pu mieux le dire moi-même. –
Est-ce que tag n'est pas son identité? –
Ce n'est pas que les types de valeur n'ont pas d'identité, c'est que toutes les instances d'un tri particulier ont la même identité –