L'uso di tipi di dati primitivi per rappresentare idee di dominio è l'odore del codice chiamato Obsione primitiva. Ad esempio utilizzando il tipo di dati stringa per rappresentare nome umano: si consiglia di evitare ciò definendo un oggetto valore specifico del dominio con metodi appropriati.
Ma per quanto riguarda i puntatori?
Non è ossessione primitiva usare CItem * o shared_ptr invece di altri tipi specifici di dominio come CItemHandle, CItemLink ecc.?
Modifica:
Il mio punto di vista con questa domanda è che l'utilità del tipo non riguarda solo i comportamenti che consente, ma anche i comportamenti che non consente. Il tipo primitivo ti dà alcuni vincoli. I tipi definiti dall'utente possono darti diversi vincoli. Grazie a questo, il tipo definito dall'utente può chiaramente modellare il dominio usando il vincolo di dominio e la dicitura domaing nella sua interfaccia e questo aiuta anche a promuovere il ragionamento giusto e nella giusta decisione quando effettuano cambiamenti nel sistema. Il tipo definito dall'utente che incapsula il puntatore ti dà semplicemente un controllo più preciso rispetto al puntatore stesso per farne un uso appropriato.