In un progetto a cui sto partecipando in questo periodo si è deciso di utilizzare il Data Access Application Block per gestire le chiamate allo strato dati. Oggi discutevo con uno dei miei colleghi circa l'utilizzo delle transazioni ADO.NET congiuntamente al DAAB. Una delle cose mi hanno lasciato pensare (e un po' perplesso) è il fatto che per lanciare il metodo statico ExecuteNonQuery(SqlTransaction, CommandType, string, SqlParameter[]) occorre dichiarare e istanziare tramite using() la connessione al DB al di fuori del metodo, nell'ambito del codice dello strato da cui parte la chiamata. L'esempio riportato nella documentazione tecnica di DAAB è questo; come si può vedere è il codice chiamante che dichiara, istanzia e apre/chiude la connessione al DB.
// create and open the connection SqlConnection con = new SqlConnection("Server=(local); Database=Northwind; Integrated Security=True;"); con.Open(); // create the SqlTransaction object and start a new transaction SqlTransaction tran = con.BeginTransaction(); try { // use a parameter array of SqlParameter objects SqlHelper.ExecuteNonQuery(tran, CommandType.StoredProcedure,"InsertDemographic", new SqlParameter("@CustomerTypeID", "FREQUENT"), new SqlParameter("@CustomerDesc", "Frequent orderer")); // use a SqlParameter array SqlParameter[] arParams = new SqlParameter[2]; arParams[0] = new SqlParameter("@CustomerID", "ANATR"); arParams[1] = new SqlParameter("@CustomerTypeID","FREQUENT"); SqlHelper.ExecuteNonQuery(tran, CommandType.StoredProcedure, "InsertCustomerDemographic", arParams); // commit the transaction if there are no errors tran.Commit(); MessageBox.Show("Demographic data added successfully"); } catch(Exception ex) { // rollback the transaction if there are errors tran.Rollback(); MessageBox.Show(ex.Message.ToString()); } finally { // close the connection con.Close(); }
Quello che mi chiedo ora è questo... Se per utilizzare le transazioni devo creare la connessione al DB nell'ambito del codice chiamante (per esempio dentro alla logica di business), come posso pensare di ottenere un perfetto layering e una scalabilità degna di questo nome usando DAAB? La cosa mi lascia perplesso, credo che la soluzione proposta non sia ottimale, soprattutto in ambito di sviluppo enterprise, dove gli aspetti di scalabilità e stratificazione applicativa sono molto importanti e spesso un prerequisito non prescindibile.
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- I design pattern di .NET, il 13 luglio 2005 alle 12:02
- SSL e il degrado di prestazioni nei WS, il 23 novembre 2004 alle 22:40
- DataAdapter e connessioni , il 22 ottobre 2004 alle 14:50
- Concatenazione dei costruttori di una classe, il 7 settembre 2004 alle 16:07
- .NET e COM: l'unione fa la forza!, il 27 agosto 2004 alle 15:42