SO tag es muy probablemente una entidad. Las etiquetas pueden ser creadas, fusionadas, eliminadas y renombradas. Hay funciones como 'etiquetas similares', etiquetas de usuario, etc. Algunas de estas funciones, especialmente el ciclo de vida, requerirán una identidad. Ejemplo clásico de DDD donde la persona que cambia su nombre sigue siendo la misma persona, la misma identidad. Lo mismo con las etiquetas donde el usuario puede decidir renombrar "domain-driven-design" a "DDD" y seguirá siendo lo mismo. Las etiquetas también necesitan atributos adicionales como tag.Id
, tag.Name
, tag.CreatedOn
, tag.CreatedBy
, tag.Locked
etc. Probablemente exista un repositorio de etiquetas correspondiente que pueda imponer la regla de unicidad de nombre.
En resumen, SO Tag no es un objeto de valor DDD porque es mutable y tiene un ciclo de vida. Más importante aún, Tag no es solo una característica de una Pregunta (esto es lo que creo que fue pasado por alto por otras respuestas). Participa en muchas más relaciones que eso. En otras palabras, Tag es más que una suma de sus atributos, también tiene 'identity conceptual'. Por otro lado TagName es un ejemplo perfecto de Value Object. Su único propósito en la vida es describir otra entidad (Etiqueta). TagName no es más que una cadena que puede tener algunas reglas incorporadas, como la duración máxima y la comparación insensible a mayúsculas y minúsculas. También puede tener sentido simplemente usar String en su lugar.
código que muestra preguntas pueden usar algo como esto:
IList<TagName> tags = question.GetTags();
Código que las etiquetas de la pregunta puede tener este aspecto:
void TagQuestion(Question q, TagName tagName) {
Tag tag = _tagsRepository.FindByName(tagName);
if (tag == null) {
tag = CreateNewTag(/* capture creator, date, other rules*/);
}
q.AddTag(tag);
}
Gracias. No podría haberlo dicho mejor yo mismo. –
¿La etiqueta de la etiqueta no es su identidad? –
No es que los tipos de valores no tengan una identidad es que todas las instancias de un tipo en particular tienen la misma identidad –