Immagina questo semplice caso di utilizzo dell'applicazione, ad esempio, per scaricare i dati da outisde dell'app. Questi passaggi rappresentano la "profondità" dei livelli, dall'alto verso il basso.
- Evento tocco interfaccia utente
- ViewModel gestisce detto evento
- Alcuni servizi / gestori reagiscono di conseguenza
- La richiesta corretta viene creata ed eseguita
- L'oggetto viene recuperato e riportato al massimo.
Questo è un semplice esempio per esprimere il mio punto di vista, non stiamo cercando di essere super-precisi qui.
Ciò che conta è: sto scavando nei livelli e si verifica un'eccezione.
Più alto sono nella pila, meglio conosco il contesto dell'errore. So che è successo quando ho premuto il pulsante "login" o il pulsante "download". Quindi penso di avere molte informazioni sul contesto.
Più profondo sono nello stack, più mi avvicino alla causa effettiva dell'eccezione. So esattamente perché è successo in questa fase. Ho molte informazioni sull'errore vero e proprio. Ma non voglio davvero mostrarlo così com'è all'utente (se rilevante).
(Nota: supponiamo che l'eccezione si sia verificata ai livelli 5 o 4, la domanda non è rilevante se si verifica nel livello dell'interfaccia utente).
Come regola generale, provo ad avere messaggi di errore molto specifici in base al contesto piuttosto che al messaggio di errore stesso; lo stesso tipo di eccezione potrebbe visualizzare molti messaggi diversi a seconda di dove proviene nell'interfaccia utente. Voglio più precisione mentre salgo nello stack.
La mia domanda è:
Quale eccezione oggetto / design dovrei usare? Sono confuso, dovrei avere eccezioni molto specifiche più approfondisco, perché conosco dettagli specifici? Oppure, d'altra parte, dovrei usare eccezioni molto ampie e trasformarlo mentre è preso dai livelli, perché capisco meglio il contesto mentre mi alzo?
Non riesco davvero a capire come sia possibile ottenere messaggi precisi / piacevoli senza che tonnellate di eccezioni specifiche stiano troppo a fondo nell'architettura. Correggetemi se ho torto, ma il mio Request
non dovrebbe avere molti tipi di eccezioni rilevati, poiché la richiesta non è a conoscenza del contesto corrente; tuttavia ho bisogno di loro se voglio essere più preciso nel mio messaggio.
Ad esempio, probabilmente utilizzerò la stessa Request
class per più chiamate diverse, quindi sarebbe RequestException
o ServerException
; ma quando l'utente lo vive, potrebbe fare due cose molto diverse.
Ancora una volta, sto solo facendo degli esempi per l'esempio, ma un login e un recupero dei dati dovrebbero essere gestiti in modo completamente diverso, tuttavia, in fondo, potrebbero essere entrambi lo stesso ServerException
, che è troppo ampio se voglio mostrare qualcosa di specifico per l'interfaccia utente
Non sono sicuro di come gestirlo, sembra complicato / confuso, eppure dovrebbe essere molto semplice dato che mi sembra di avere tutte le informazioni che dovrei avere. Cosa mi manca?
E, ancora più importante, come gestisci le eccezioni , di solito, quando saliti nello stack?