Ho letto Programmazione difensiva vs Gestione delle eccezioni e se / else dichiarazioni o eccezioni , ma nessuno contiene qualcosa di rilevante per quello che sto cercando per.
Tenendo conto del fatto che la gestione delle eccezioni è più costosa della semplice progettazione del codice ed evitando certi scenari, di recente sono giunto alla seguente domanda: qual è la "soglia" della complessità computazionale su cui dovrebbe essere preferita la gestione delle eccezioni? p>
Nel mio caso, sto ricevendo i dati da un middleware esterno e alcune volte i campi sono nulli. Ci sono due casi in cui posso gestirlo.
prima
try {
if (user.departNameEn.Equals(selectedUser)
|| user.departNameFr.Equals(selectedUser)
|| user.departNameDe.Equals(selectedUser)) {
string fileName = AppDomain.CurrentDomain.BaseDirectory
+ @"Images\Users\" + user.Id + user.ShortName + ".png";
if (File.Exists(fileName))
{
retVal = fileName;
return retVal;
}
}
}
catch (NullReferenceException e)
{
continue;
}
Secondo
if (!string.IsNullOrEmpty(user.departNameEn)
&& !string.IsNullOrEmpty(user.departNameFr)
&& !string.IsNullOrEmpty(user.departNameDe)
&& !string.IsNullOrEmpty(user.Id)
&& !string.IsNullOrEmpty(user.ShortName)) {
if (user.departNameEn.Equals(selectedUser)
|| user.departNameFr.Equals(selectedUser)
|| user.departNameDe.Equals(selectedUser)) {
string fileName = AppDomain.CurrentDomain.BaseDirectory
+ @"Images\Users\" + user.Id + user.ShortName + ".png";
if (File.Exists(fileName))
{
retVal = fileName;
return retVal;
}
}
}
Intuitivamente, il primo approccio è molto più pulito ed elegante del secondo, ma quale di questi è meno costoso dal punto di vista computazionale? Dove finiscono i limiti della programmazione difensiva?
Nota per duplicare il rapporto: come ho spiegato nell'introduzione, ho letto i due argomenti principali per Exception Handling vs Defensive Programming ma quello che sto chiedendo in realtà è qualcosa di diverso e molto specifico: quando la Programmazione difensiva diventa computazionalmente più costosa della semplice semplificazione del codice e l'aggiunta di una singola dichiarazione try-catch
?