View Single Post
Old 07-02-2003, 21:03   #43
dm69
Senior Member
 
Iscritto dal: Dec 2001
Messaggi: 428
Quote:
Oggetto: Re: x cionci

--------------------------------------------------------------------------------

dm69 ha scritto:


Al codice chiamante non interessa sapere l'esatto statement che ha dato errore, al chiamante interessa sapere che qualcosa e' andato male, quindi basta che il codice chiamato generi un eccezione di tipo diverso per ogni errore che deve riportare (es. nel nostro caso: PasswordCheckException, BadUserNameException, ...) possibilmente tutte figlie della stessa classe di eccezione.




ti troveresti ad avere in un progetto decine (o centinaia) di eccezioni, con nessun vantaggio e un sacco di manutenzione in piu'.
in un driver jdbc secondo la tua teoria dovrebbero essere contenute qualcosa tipo 3-4mila classi di eccezione diverse (e se volessi sapere esattamente che errore ha generato una connect o uno statement dovresti scrivere un corrispondente numero di catch)
Se progettiamo con i piedi si!
Sistemi che usano le eccezioni per l'error handling tendono a definire parecchie eccezioni (il sistema che sto sviluppando al momento attuale consta di circa 200.000 righe di codice e ci sono una trentina di eccezioni).
Non e' detto che per ogni errore bisogna avere una eccezione diversa: per esempio un errore di lettura / scrittura / apertura / chiusura di un file si puo' reppresentare ad esempio con FileSystemException e dentro si puo mettere una stringa che da' un informazione dettagliata di cosa e' successo.

Secondo me avete una idea sbagliata della gestione delle eccezioni: le eccezioni non si devono catturare quasi mai, ha senso farlo solo se dobbiamo effettuare delle azioni di recovery, altrimenti le possiamo bellamente ignorare. Infatti provedono loro a terminare la funzione da cui e' saltata fuori l'eccezione e tutti i chiamanti finche' non arriviamo a un chiamante che deve prendere la contromisura all'errore che gli e' tornato.


Un codice che usa l'approccio C tende a essere cosi':

....

int ret_code = 0;

ret_code = f1();
if (ret_code == E_ERROR_CODE)
{
return E_ERROR_CODE;
}

ret_code = f2();
if (ret_code == E_ERROR_CODE)
{
return E_ERROR_CODE;
}

ret_code = f3();
if (ret_code == E_ERROR_CODE)
{
return E_ERROR_CODE;
}

....


un codice che usa le eccezioni tende a essere cosi:
.....
f1();
f2();
f3();
....


Non c'e' paragone no?
__________________
PC: Phenom 2 955, 4 GB RAM DDR3, 2 x ATI HD 7870 Ghz edition
dm69 è offline   Rispondi citando il messaggio o parte di esso