Ho un unico sistema software che consente agli sviluppatori di specificare un ID o un nome per creare NodeReferences
. Entrambi funzionano bene, ma gli ID non sono garantiti per essere gli stessi in diversi ambienti. Ho provato nella documentazione e nelle conversazioni a sottolineare che gli ID non dovrebbero essere codificati (dato che si romperanno quando vengono distribuiti in ambienti diversi), ma alcuni sviluppatori li stanno ancora utilizzando.
Funziona solo in ambiente dev:
var level = LevelReference.ById(20);
var node = NodeReference.ByName(level, _patientGuid.ToString());
Funziona in tutti gli ambienti:
var app = ApplicationReference.ByName("Reporting");
var area = AreaReference.ByName(app, "Default");
var level = LevelReference.ByName(area, "Patient");
var node = NodeReference.ByName(level, _patientGuid.ToString());
Penso che l'appello sia solo che produce meno linee di codice. L'uso degli ID non è di per sé negativo (dal momento che ci sono casi d'uso validi come il caching dell'ID restituito dal server e il suo utilizzo in un secondo momento per una ricerca più rapida), ma gli ID hardcoded sono negativi. La maggior parte delle volte il primo codice genera un'eccezione, ma è possibile che possa essere un ID valido per un oggetto diverso da quello previsto dallo sviluppatore, e ciò potrebbe causare problemi molto gravi.
Qual è il modo migliore per scoraggiare l'uso di tali costanti nel codice? Idealmente mi piacerebbe lanciare qualche tipo di errore del compilatore quando vedo un codice come il primo esempio, o almeno lanciare un'eccezione prima che la chiamata arrivi al database.