Trattare gli errori (avvertenze) minori non critici nelle librerie

1

Sto scrivendo una piccola libreria per aprire un xml. Se la lettura dell'elemento xml di livello superiore non riesce, la libreria genera un'eccezione.

Tuttavia, se non si riesce a leggere uno degli elemetns secondari di livello inferiore xml, al momento lancio l'eccezione per arrestare il costruttore, ma poi lo prendo e non farò nulla, poiché l'errore potrebbe non essere critico.

Ho bisogno di un modo per dire al programma principale che qualcosa è successo.

Posso pensare a due modi per farlo accadere. Uno è quello di memorizzare i dati offensivi in una struttura e renderli accessibili al programma che chiama la libreria. Questa è la mia prima scelta, un po 'sono aperta ai suggerimenti.

Un altro è passare un qualche tipo di stream a cui la libreria scriverà errori.

Il problema qui è che devo scegliere tra la libreria che non dipende dal flusso che passo e fare in modo che lo stile di output dell'errore corrisponda a quello del programma principale.

C'è un modo OO in cui questo è normalmente fatto? C'è un modo migliore?

Modifica Non sto scrivendo un lettore xml, sto usando quello fornito con .NET. I dati che ottengo da XML potrebbero o potrebbero non essere a posto per il mio utilizzo, cioè il bit con cui ho a che fare.

    
posta Karlovsky120 20.12.2018 - 15:16
fonte

2 risposte

3

Sembra che tu debba usare un delegato per risolvere questo problema. Passando un metodo alla libreria, è possibile chiamare tale metodo quando viene generato un errore. Nell'applicazione principale, un utente dovrebbe semplicemente scrivere il codice di registrazione specifico conforme a qualsiasi standard impostato nella propria applicazione e qualsiasi altra azione che dovrebbe verificarsi a seguito dell'errore rilevato.

    
risposta data 20.12.2018 - 16:00
fonte
2

Ci sono praticamente dozzine di modi corretti per gestire questo problema, e nessuno di questi è "migliore" o "più OO" in generale. Devi solo decidere in che modo si adatta meglio alle tue esigenze generali, che tipo di informazioni puoi e vuoi restituire in caso di errore "non critico".

  • L'utilizzo di una struttura dati speciale o di un valore di ritorno, come suggerito da te stesso, è probabilmente l'approccio più semplice qui e spesso sufficiente per molti casi.

  • L'utilizzo di un delegato, come suggerito da Kevin Mills, presenta vantaggi se si desidera ottenere immediatamente le informazioni sull'errore quando viene rilevato e accedere immediatamente, nel caso in cui ci si aspetti che l'intero processo di analisi si interrompa in un secondo momento , forse a causa di un'eccezione.

  • Nel caso in cui manchi qualche elemento non critico, un altro approccio potrebbe essere quello di fornire valori predefiniti sensibili per tali elementi mancanti e non segnalare alcun avviso al chiamante. Ma attenzione, assicurati di usare questa tattica solo se non c'è possibilità di nascondere qualche errore in questo modo.

E sì, è anche una buona idea non registrare gli avvertimenti direttamente in alcuni stream, ad esempio, se si desidera mantenere la lib il più generale possibile, senza dipendenze locali (come l'aspettativa di un utente di lingua inglese ).

    
risposta data 22.12.2018 - 13:07
fonte

Leggi altre domande sui tag