Ultimamente, mi sono trovato in una serie di discussioni con il mio capo sulla gestione delle eccezioni all'interno della nostra app Web (un'applicazione ASP # MVC di asp.net).Quanto resiliente dovrebbe essere la mia app web?
Fondamentalmente le conversazioni più o meno così:
Boss: "C'è qualcosa che non va con il nostro programma, database clienti di x è andato giù oggi e tutti sono di vedere la pagina di errore."
Me: "Per lo più ogni pagina dell'applicazione utilizza il database per qualcosa (eccetto la pagina di errore), non c'è altra alternativa ragionevole che mostrare la pagina di errore."
Boss: "La nostra applicazione dovrebbe essere più resiliente - la parte dell'applicazione che non richiede l'accesso al database dovrebbe comunque funzionare."
Spesso, i casi sono estremi come questo, ma a volte ci imbattiamo in un caso in cui ci stiamo integrando con un altro servizio in cui possiamo ancora mostrare in modo sicuro altre porzioni della pagina, o completare l'operazione, anche se con qualche codice fastidioso poiché le parti successive del codice devono utilizzare in seguito i risultati dell'operazione che potrebbe aver avuto esito negativo. Se ci sono molti punti di possibile fallimento questo può trasformarsi in un codice estremamente ingestibile.
In generale, per un'applicazione Web "normale" (non mission-critical, ecc.) Quanto tempo impiegano gli "bravi" sviluppatori a cercare di rendere il proprio codice sufficientemente flessibile per gestire questo tipo di situazioni. Il mio capo sembra pensare che il codice dovrebbe essere in grado di gestire quasi tutte le situazioni (non è possibile rilevare un'eccezione?). Non vedo come questo possa essere economico quando ci sono molti possibili punti di errore.
non dovrebbe essere un wiki? – AGoodDisplayName
In questa economia, fai quello che ti dirà il capo. –
L'esempio del database è forse un po 'estremo e semplificato. Fondamentalmente abbiamo alcune pagine che interagiscono con più servizi di terze parti: geocoding/facebook/etc ... Potrebbero esserci diverse chiamate a un determinato servizio eseguite nell'esecuzione di una pagina. I risultati di un servizio possono essere successivamente passati a un altro o utilizzati nel rendering della pagina. Supponendo che uno di questi possa essere inattivo e cercare di produrre risultati sensibili in ogni caso sembra diventare molto difficile in presenza di molti di questi servizi. – Krazzy