Ci scusiamo per il titolo confuso - questo è meglio illustrato da un esempio (ipotetico ma, si spera, illustrativo).
Per il 99% della mia applicazione un codice postale è considerato una stringa, quindi uso costantemente il nome zipCode per parametri, variabili, proprietà accessorie ecc. (ovviamente con la maiuscola iniziale appropriata)
Tuttavia, per l'1% della mia applicazione che deve comprendere le parti interne di un codice postale (ad esempio per la mappatura), ho bisogno di una classe ZipCode. La convenzione di denominazione naturale consiste nell'utilizzare il nome "zipCode" per una variabile di tipo ZipCode.
Questo crea un'incoerenza che è un odore di codice per me - a volte una variabile chiamata zipCode sarà una stringa ea volte sarà un oggetto ZipCode.
Potrei passare attraverso tutta la mia base di codice e usare solo oggetti ZipCode ovunque, ma ciò sembra eccessivo poiché la maggior parte delle volte ho solo bisogno della rappresentazione della stringa, e ci sono delle volte in cui devo usare una stringa (es. un parametro URL )
In alternativa, potrei chiamare la mia classe qualcosa come ZipCodeObject, o potrei sempre usare zipCodeString quando mi riferisco ad esso come una stringa, ma entrambi sembrano anche una cattiva convenzione di denominazione.
La mia attuale soluzione pragmatica è utilizzare il nome zipCode per entrambi. Solo se un metodo o una classe ha bisogno di avere consapevolezza di entrambe le rappresentazioni, allora uso il nome variabile zipCodeObject o zipCodeString per differenziare.
Qualcun altro ha una soluzione migliore per questo enigma?