OOP e API: dove archiviare i miei errori, avvisi, notifiche?

0

Sto lavorando su un'API e sto cercando di riportare agli utenti determinati errori (ad esempio errori di immissione, errori che si verificano durante l'elaborazione delle loro richieste, ecc.). La mia API restituisce una serie di errori (e avvisi e notifiche).

Sto iniziando a vedere un paio di problemi:

  1. Non sono completamente ASCIUTTO. Numerosi errori, avvertenze e notifiche tendono a ripetersi in diverse parti del codice. Quindi, in queste diverse parti del codice, devo impostare ripetutamente il codice, il titolo e la descrizione dell'errore (le descrizioni tendono ad avere dettagli più specifici sull'errore specifico, quindi si potrebbe sostenere che questa differenza lo rende ESENTE - - ma il codice e il titolo sono gli stessi, quindi non DRY).
  2. Le mie classi (genitore, figlio) si gonfiano di tutto il codice per gestire errori, avvisi, notifiche.

Sono tentato di creare una classe che contiene solo errori, avvertimenti e notifiche (probabilmente sotto forma di un enorme array). Forse lo renderò una classe base - e la mia attuale classe base lo estenderebbe. Potrei fare un qualche tipo di metodo per rendere più facile per le classi che lo estendono aggiungere errori (c'è un membro protetto per errori, avvisi, notifiche).

Qual è un buon approccio? Utilizzo di PHP.

    
posta ProgrammerNewbie 19.06.2017 - 08:00
fonte

2 risposte

1

Il ritorno di un "enorme array" suona come un incubo per i tuoi utenti. Stai creando un'API. Perché ti stai riprendendo dagli errori piuttosto che riportarli chiaramente? Come potresti sapere quali errori dovrebbero essere recuperati da quando sei solo un'API? Consenti all'utente API di decidere se è necessario recuperare un errore.

Se ciò non semplifica le cose a semplici eccezioni one-shot fail-early, allora accetta un log che puoi usare per registrare gli errori.

Può anche aiutare a creare classi di eccezioni uniche che non aggiungono altro che nomi univoci. Una delle poche cose per le quali utilizzo ancora l'ereditarietà.

    
risposta data 19.06.2017 - 14:16
fonte
0

Prima di poter pianificare come tenere traccia dei problemi devi pensare ai requisiti reali. Permettetemi di condividere come abbiamo gestito questo (linguaggio diverso, ma lo stesso concetto) in uno strumento di elaborazione file batch:

  • L'utente doveva conoscere il successo, l'avviso o l'errore per ogni file
  • L'utente ha bisogno della possibilità di correggere i problemi e tentare di reimportare (cioè modificare la mappatura dei campi ecc.)
  • L'elaborazione doveva continuare anche se si verificava un problema su una riga o un file

Avevamo una tabella in memoria per monitorare l'elaborazione a livello di file. C'era una colonna per il file, stato (in attesa, elaborazione, successo, errore, avviso) e messaggi. I messaggi erano solo un file CSV con una riga per avviso o errore.

L'elaborazione è stata piuttosto semplice.

  • Compila la tabella in memoria con l'elenco di file da elaborare
  • Il controller di elaborazione ha aggiornato lo stato e ha chiamato un parser per il file
  • Il parser ha restituito il contenuto CSV per tutti gli errori e gli avvisi
  • Il controller di elaborazione ha aggiornato di nuovo lo stato e assegnato il CSV alla colonna dei messaggi

L'interfaccia utente è stata in grado di presentare lo stato e consentire all'utente di visualizzare il contenuto dell'elenco degli errori. Era un'app desktop, quindi alcuni di questi aggiornamenti di stato erano facili da fare.

La linea di fondo è che probabilmente dovrai tenere traccia degli errori a più di un livello. La complessità deve corrispondere alle tue reali esigenze.

È possibile passare l'oggetto a cui si sta tracciando il processo a ciascun metodo / componente che deve farvi riferimento oppure è possibile fare in modo che lo stesso codice restituisca la raccolta di stato al chiamante. Rendi chiaro a cosa appartiene il messaggio fornendo qualsiasi identificatore possibile (come nome del file, numero di linea ecc.). Potresti avere errori ripetuti, ma è per record diversi.

    
risposta data 18.08.2017 - 20:51
fonte