Abbiamo bisogno di buone astrazioni. Tuttavia, a volte non ha molto senso fornire astrazioni che non hanno un'utilità speciale. Quindi, è un compromesso da fare. Se devi sbagliare, fallo sul lato della creazione del tipo specifico del dominio per un dato semplice come int o string.
Considero generalmente accettabile includere tipi di date primitivi all'interno di un'altra astrazione (come il tuo Account), in quanto tali campi in tale contenitore forniscono il contesto / significato per questi tipi. BirthDate o AccountStartDate sono esempi, che ritengo siano sufficienti come date semplici; il loro significato è nel contesto del tipo di contenuto. Il raggruppamento di questi tipi aggiuntivi qui non offre necessariamente un valore e può rendere i valori più difficili da utilizzare.
Tuttavia, i tipi di numeri e i tipi di stringhe sono così comuni (e di basso livello) che possono essere molto inclini all'utilizzo, quindi merita un'attenzione aggiuntiva, ad es. essere avvolti in tipi significativi di dominio. Non va bene trovare questi tipi / attributi primitivi da soli al di fuori di alcune astrazioni contenenti. Quindi, se vedi che il valore di un campo primitivo è ampiamente condiviso nel codice, separato da un oggetto contenitore, allora è un odore che dovrebbero avere i loro tipi.
Nella direzione opposta, come per la data di nascita, può essere eccessivo assegnare a ciascun campo specifico un tipo specifico. Per un altro esempio, c'è una nozione di numero di telefono per un contatto di emergenza. Comporre questo numero equivale a comporre qualsiasi altro numero, quindi non vogliamo o non abbiamo bisogno di classi speciali per comporre un numero di telefono di emergenza, e semplicemente sappiamo che è il contatto di emergenza dall'astrazione contenente dal campo piuttosto che dal tipo .