Newsgroup: it.comp.java
Titolo: re: "trasporto" errori tra strati architettura

qualche giorno fa avevo chiesto info su come "trasportare" errori tra i 
diversi strati di una applicazione strutturata secondo un'architettura a 
strati secondo un MVC e con un DataBase Access Object (DAO).
ora ci ho smanettato 1 pò e vorrei avere qualche giudizio a proposito 
(abbiate pietà che sono ancora alle prima armi :-) ).
nello strato in cui sono presenti le funzioni che "lavorano" sul db 
pensavo di fare qualche modifica in questo modo :
public int funzione_sul_db (Connection c, oggetto o) throws SQLException {
   	try {
		Statement st = c.createStatement();
   		String query = ......
   		......
     	}
	catch(eccezione){
		// se vi è errore nell'esecuzione della query esegui
		// questo
		return valore_associato_all'errore
	}
	finally {
       		return valore_restituito_da_query
   }
ad un determinato valore restituito da tale funzione corrisponde un 
errore, quindi agli strati superiori se avrò valori "normali" sarà 
andato tutto bene altrimenti per valori "particolari" (che deciderò a 
priori) verrà fatta un'azione relativa all'errore.
potrebbe andare bene?che ne dite?sbagliato qualcosa?

 potrebbe andare bene?che ne dite?sbagliato qualcosa?
IMHO, e' un approccio di vecchio stile. Perche' non usare delle classi,
invece che valori int ? E perche' non usare classi custom che estendono
java.lang.Exception ? E perche' non fare ricorso all'OOP ?
Per esempio, definisci una classe "ApplicationException" e una
sottoclasse "DatabaseException".
Il tuo codice sara' piu' o meno:
  try {
    // query SQL
  } catch (SQLException e) {
    log.error("Qualcosa e' andato storto ", e);
    throw new DatabaseException(e);
  }
Negli "strati superiori" potrai decidere cosa fare della
DatabaseException, se ignorarla o passarla ancora allo strato superiore
come ApplicationException, per esempio.
-- 
Giambo - Occhio al filtro antispam _e_ alla whitelist !

"iblinku" <NOSPAMM...@genie.itNOSPAMM> ha scritto nel messaggio 
news:357trnF...@individual.net...

quel int di ritorno sarebbe il codice di errore?
in java e in generale nei linguaggi OO non è un approccio da seguire in 
generale.
Bastano le eccezioni a definire l'errore, e se proprio ti serve qualcosa di 
acora piu dettagliato (tipo far conoscere al livello soprastante il codice 
dell'errore SQL cosa che SQLExceptrion fa) aggiungi un campo codice di 
errore alla tua eccezione custom.
Secondo me cmq non afferrato bene il ruolo delle eccezioni, perché un 
approccio di questo tipico mi sembra piu' per programmatori c. 

 
mi rendo conto che non è la soluzione migliore ma dovendo fare una 
modifica "veloce" all'applicazione opterei per questo modo un pò brutale :-)
try {
     // query SQL
   } catch (SQLException e) {
     log.error("Qualcosa e' andato storto ", e);
     throw new DatabaseException(e);
   }
quando chiamo l'eccezione di tipo databaseException questa dovrebbe 
essere automaticamente riportata allo strato superiore?

 automaticamente riportata allo strato superiore?
A questo punto basta...te l'ho già detto in diecimila modi diversi, con 
esempi diversi..ma si vede che tu nemmeno leggi.
Apri un libro di java o guardati un tutorial di base prima di postare 
domande di architettura. 

Secondo me è inutile che trappi l'eccezione per ributtarne fuori un'altra di
tipo database... nutta fuori direttamente la SQLException...
-- 
---------------------------------------------------
......vieni a trovarmi 
http://www.glz.it
......dai voce al tuo sito 
http://www.talkwithus.it
---------------------------------------------------