Não seria interessante estender o uso de Value Objects para os demais atributos das Entidades?
CRM e Nome poderiam ser Value Objects, e na minha opinião você ganharia algumas coisas:
- Domínio mais expressivo - CRM e Nome comunicam melhor do que "String"
- Validação encapsulada - CRM provavelmente tem um formato, poderia ser validado. Nome deve ter um tamanho máximo, ou uma exigência mínima de ter pelo menos um sobrenome.
- Estender comportamento - Se a aplicação precisasse do primeiro nome para exibir após logar, poderia ser extraído do Nome, ao invés de fazer uma lógica em uma String. Outro exemplo é o CRM fornecer a informação de qual Estado ele é.
- Formatação e Conversão - Os próprios Value Objects teriam essas capacidades, sem precisar recorrer às classes comuns que frequentemente encontramos como Utils ou Parsers, mais orientado a função (procedural) do que objetos.
Vi que isso tem até um nome técnico, "Obsessão por primitivos", e mesmo usando DDD, a gente tende a limitar o uso de nossos próprios tipos, que nos dão muito poder e expressividade, para não aumentar o número de classes.
Fica a reflexão.