Quais são as diretrizes gerais ou regras práticas para quando usar um objeto específico do domínio versus uma string ou número simples?
Exemplos:
- Classe etária vs Inteiro?
- Classe FirstName vs String?
- UniqueID vs String
- Classe PhoneNumber vs String vs Long?
- Classe DomainName vs String?
Eu acho que a maioria dos profissionais de OOP diria definitivamente aulas específicas para PhoneNumber e DomainName. Quanto mais regras sobre o que os torna válidos e como compará-los, tornam as classes simples mais fáceis e seguras de lidar. Mas para os três primeiros, há mais debate.
Eu nunca me deparei com uma classe "Age", mas alguém poderia argumentar que faz sentido, pois deve ser não negativo (tudo bem, eu sei que você pode argumentar por idades negativas, mas é um bom exemplo que é quase equivalente a um número inteiro primitivo).
String é comum para representar "Nome", mas não é perfeito porque uma String vazia é uma String válida, mas não um nome válido. A comparação geralmente seria feita ignorando o caso. Certamente, existem métodos para verificar se há vazio, fazer comparação sem distinção entre maiúsculas e minúsculas, etc., mas isso exige que o consumidor faça isso.
A resposta depende do ambiente? Estou preocupado principalmente com software corporativo / de alto valor que permanecerá e será mantido por possivelmente mais de uma década.
Talvez eu esteja pensando demais nisso, mas realmente gostaria de saber se alguém tem regras sobre quando escolher classe vs primitiva.
people may be one or two years older in Asian reckoning than in the western age system
Age
classe em vez de um número inteiro quando precisa do comportamento adicional que essa classe forneceria.