Come ti avvicineresti alla notifica degli errori?

4

Recentemente abbiamo avuto una discussione con i miei colleghi causata dal mio tentativo intenzionale di generare un messaggio user friendly sull'errore verificatosi (business logic) sul lato server.

Hanno insistito per mettere tutte le risorse stringa localizzabili all'interno dell'assembly del client Web e non quelle del server uno. L'argomento è lasciare che il cliente decida come generare e presentare messaggi all'utente. Non posso che essere d'accordo con l'esigenza di una tale flessibilità per i servizi pubblici, tuttavia sviluppiamo un sistema di back-office intranet e sviluppiamo anche parte client (sia thin che thick client). Francamente parlando il codice che ho visto finora non fa altro che generare il messaggio (identico al codice che ho provato a inserire in BL). Non ci sono controlli particolari che evidenziano popup precisi o qualcosa di simile. Ma ora la logica è duplicata: client web + win client.

Il mio punto è che è meglio aderire ai principi DRY e YAGNI. Copia incolla è malvagio.

Il secondo argomento è l'incapsulamento. Se si verifica un errore all'interno di Business Logic, è BL che sa come descrivere l'errore e quali informazioni aggiuntive devono essere raccolte e presentate all'utente senza compromettere la sicurezza o rivelare dettagli di implementazione alla parte client.

Ad esempio, in caso di modifiche simultanee restituiamo ConcurrenAccessError dal server e il client lo converte in "bla bla bla, l'oggetto è stato modificato da qualcun altro, modifica ancora una volta, per favore". Ora, per aggiungere il nome utente e il timestamp delle modifiche, ho bisogno di estendere ConcurrentAccessError class con proprietà aggiuntive e cambiare il codice di generazione del messaggio in due punti. Vorrei chiedere se il client dovrebbe anche conoscere la concorrenza come un tipo di errore speciale se non fa nulla al riguardo oltre alla notifica dell'utente. Il sistema non è progettato per la risoluzione dei conflitti tramite unione. Credo che l'elevata granularità degli errori sia importante solo quando tali informazioni strutturate consentono al sistema in qualche modo di aiutare l'utente a effettuare correzioni. (Il campo di input dell'email evidenziato e focalizzato è migliore di un semplice messaggio sotto il modulo)

Bene, alla fine non sono riuscito a convincere i miei colleghi. Ho dovuto seguire le convenzioni. Eppure ho bisogno di più argomenti pro e contro per continuare la discussione o concordare con loro.

Mi piacerebbe sapere quali strategie di notifica degli errori di solito usi e perché. Dove metti la logica della costruzione del messaggio?

    
posta Pavel Voronin 03.08.2014 - 00:34
fonte

2 risposte

4

Ogni errore dovrebbe idealmente informare il consumatore immediato di un problema che può "capire".

Segnala errori dai servizi Web che gli sviluppatori e il loro codice cliente devono interpretare. Ciò significa che gli oggetti business posti dietro un servizio web non contengono errori dell'utente finale. Gli oggetti business non dovrebbero nemmeno sapere quale interfaccia li sta alla fine invocando.

Il codice client o il codice che si trova "più vicino a" all'utente deve interpretare gli errori di livello inferiore e fornire istruzioni all'utente finale in base alle necessità. Alcuni errori non devono essere segnalati a meno che non si ripetano.

La mia gmail, ad esempio, non mi dà un assalto di errori di timeout quando la mia connessione si interrompe, discretamente posiziona una piccola stringa di testo sullo schermo facendomi sapere che il server non può essere raggiunto, che si tratta di riprovare.

E anche se un errore di connettività è un po 'diverso da quello che stai chiedendo, penso che illustri il punto: il cliente ha bisogno di sapere come interpretare gli errori tecnici di livello inferiore e dire all'utente come affrontare il problema ignorando il problema .

    
risposta data 03.08.2014 - 02:43
fonte
1

Sono d'accordo con @svidgen, il server dovrebbe elaborare e probabilmente registrare gli errori in modo server, l'interfaccia utente dovrebbe elaborare errori e reagire in modo amichevole, quindi i messaggi e il codice dovrebbero probabilmente risiedere sul lato client. Se si dispone di due client per il server (ad esempio, client desktop e client Web), è necessario attenersi a DRY e spostare il codice client comune per separare l'assembly utilizzato da entrambi i client. Naturalmente se è un'applicazione interna e sei sicuro al 100% che non avrà bisogno di cose come la localizzazione, quindi la creazione di questo assembly esclusivamente allo scopo di generare un messaggio di errore è un eccesso, ma in generale, entrambi i tuoi client potrebbero beneficiare di tale libreria .

    
risposta data 04.08.2014 - 10:21
fonte

Leggi altre domande sui tag