Sto cercando esempi di creazione, gestione e gestione di numeri / codici di errore.
Per capire di cosa sto parlando, prendiamo uno scenario di esempio: (UE - utente finale, IT - helpdesk)
EU: - (calls IT) something's wrong
IT: - what happened?
EU: - it says "cannot create xyz"
IT: - what have you done?
EU: - ummm....
(conversation continues for another gazillion years)
... e l'eccezione che produce il messaggio cannot create xyz
viene lanciata in dozzina di posti nell'intero sistema, quindi il tizio IT non sa dove cercare.
Un altro approccio (che mi piace davvero e vorrei usare) è ad esempio:
Ora,quandol'UEchiamaIT,l'interaconversazioneapparecosì:
EU:-Ihaveerror1004IT:-ok,thanks,we'lltakealook
Avendouncodicedierrore,ilragazzoITsaimmediatamentedovecercarel'errore.Nonhabisognodichiedereall'UEdiforniremoltidettaglifuorvianti,puòsemplicementesedersielavorareo,sesaperché,spiegarechesitrattadiunerroreintenzionaleperchél'UEhafattoqualcosadisbagliato.
Sembrafiorieciambelle,vero?
Maqualisonolemiglioripraticheperottenerequestocomportamento?
SupponiamochequestosiaJavaestiamocostruendoappdazero.Quellochesofinoraèchenonriescoaottenereicodicidierroredaldatabase,perchésevienelanciataun'eccezione,nonpossofareaffidamentosufontiesterne.
Questoportaaproblemiconillavorodisquadra.DiciamocheJohn,PauleAdampresumonocheuserannoicodicidierroredurantelascritturadellaloroappegenererannoerroriinmodoincrementale.VedolapossibilecollisionequandoJohnvuolemarcareilmessaggiodieccezionenelcodiceusandoilnumero#256
,maPaulnonlosaecrealasuaeccezione,anchecon#256
,eusaquestaeccezioneinpochedozzinediluoghiinapp.Allafinedellagiornatanessunosacosasignifichiveramentel'errore#256
.
Quindiforsec'èunaltroapproccio:utilizzareunapiccolamapraticaappwebauntavolochegestiràlagenerazionedinumeridierrore,quindiJohn,PauleAdampossonosemplicementefareclicsu"Genera" quando vogliono un nuovo numero di errore univoco?
Sopra elaborato porta anche a un'altra domanda: quali sono le migliori pratiche per impostare i codici di errore? Eccezionalmente, in questo modo:
public class FooException extends Exception {
public FooException() { super(); }
public FooException(String message) { super("Error #256 - xyz is forbidden"); }
public FooException(String message, Throwable cause) { super("Error #256 - xyz is forbidden", cause); }
public FooException(Throwable cause) { super(cause); }
}
o
try{
(some stuff)
} catch (FooException ex){
System.out.println("Error #256 - you cannot do xyz in here");
}
Sospetto che la seconda opzione sia migliore, perché indica un posto univoco e specifico nel codice nell'intero progetto, ma sembra più difficile da gestire.
Qualche idea? Qualche pratica? Consigli? Grazie.