Attualmente sto riscontrando un problema con un fornitore di librerie di controllo di terze parti. Hanno un'eccezionale cultura occulte che ostacola il mio approccio generale di fail-fast nello sviluppo del software.
Un esempio: il loro controllo di rete propone un evento RowValidating
in cui è possibile verificare l'input dei dati dell'utente prima che venga eseguito il commit sull'oggetto sottostante. L'argomento dell'evento ha una proprietà booleana IsValid
e una proprietà stringa ErrorText
. Se il gestore ha la proprietà IsValid
impostata su False
, la griglia considera la riga non valida, presenta il testo dell'errore seguito da "Vuoi correggere il valore?" in una finestra di dialogo sì / no.
Il problema è che se il gestore lancia un Exception
effettivo durante il processo di convalida, la griglia lo cattura e si comporterà esattamente come descritto sopra - solo utilizzerà la proprietà Message
dell'eccezione rilevata come testo di errore di convalida. L'istanza di eccezione, anche se in realtà è il mio codice che l'ha provocata, non può mai essere catturata in seguito. Non c'è modo per me di gestirlo a parte il wrapping del codice di convalida in un blocco try / catch che cattura tutto.
Ovviamente non voglio che il mio codice generi eccezioni, ma hey ... errare humanum est ! Se ciò dovesse accadere, preferirei molto far sì che l'app si arresti in modo anomalo e brucino piuttosto che nascondere l'eccezione ! Per questi scenari ho un gestore globale che registrerà l'eccezione non gestita appena prima che l'app si arresti in modo anomalo. Questo è dove mi aspetterei che qualcuno di loro finisse.
Dato che la mia azienda ha fatto un investimento enorme in questo particolare fornitore di terze parti (sia dall'apprendimento che dal codice reale in esecuzione con esso), non posso semplicemente correre verso un altro fornitore, tanto meno il mio controllo della rete.
Ho provato a parlare con il venditore in modo che questo venga risolto, ma non faranno nulla per timore di causare cambiamenti improvvisi per altri clienti (comprensibili). Inoltre, non introdurranno alcun tipo di bandiera booleana per eludere il comportamento (meno comprensibile).
In questo momento mi sento a disagio nel distribuire un'app in cui so che è possibile che venga eseguita in uno stato danneggiato. Odio anche dover avvolgere il mio codice evento in un blocco try / catch che potrebbe incontrare un Exception
da cui è impossibile recuperare con garbo.
Che tipo di soluzione posso usare per prevenire o risolvere questo problema?
TL; DR : il fornitore di terze parti toglie% istanze diException
generate dal mio codice, soluzioni alternative sono brutte e insoddisfacenti, non sanno cosa fare con questo.