2010-12-18 26 views
2

我經常用這個代碼或整個OnClicks和OnLoads這個代碼的形式:在函數中放置經常重複的代碼?

DataTable dt = new DataTable(); 
    using (SqlConnection con = new SqlConnection(conString)) 
    { 
     using (SqlCommand cmd = new SqlCommand("administratorGetAll", con)) 
     { 
      using (SqlDataAdapter da = new SqlDataAdapter(cmd)) 
      { 
       da.Fill(dt); 
      } 
     } 
    } 

所以我想知道什麼是最好的方式,以如此大的重複最小化;功能?

目前我正在試圖這樣的事情:

public void SqlStructGetAll(string storedProc, string connection) 
{ 
    DataTable dt = new DataTable(); 
    using (SqlConnection con = new SqlConnection(connection)) 
    { 
     using (SqlCommand cmd = new SqlCommand(storedProc, con)) 
     { 
      using (SqlDataAdapter da = new SqlDataAdapter(cmd)) 
      { 
       da.Fill(dt); 
      } 
     } 
    } 
} 

但我不知道如果我用這種方式了。

+0

刪除了編程功能標籤。將通用代碼放入函數並不意味着函數式編程。這對F#,Lisp等許多語言來說尤其重要。 – 2010-12-18 16:12:27

回答

1

有一些設計模式可以解決代碼重複是主要問題的設計問題。

適用於您的方案的模式是Gang Of Four模式目錄中的模板方法設計模式。

你是在正確的方向 - 請參閱http://www.dofactory.com/Patterns/PatternTemplate.aspx有關設計模式的詳細信息。

大多數現代框架爲像數據庫處理這樣的操作提供實用包裝和模板方法 - 您可以使用提供這種方法的Spring.NET。你可以看看這個鏈接http://www.springframework.net/docs/1.3.0/reference/html/ado.html例如模板方法在Spring .NET中使用ADO.NET API

+0

我擔心這可能會對我創建的網站稍微高級一些。有沒有創建商業和模型圖層對象可能更輕鬆? – balexander 2010-12-21 00:54:40

0

通過將您的數據訪問放置在onclick和onload函數的代碼隱藏中,您可以緊密地耦合數據訪問層與您的表示層。儘管你認爲你應該從每個函數中抽取出這種類型的代碼,但是你正確地選擇了正確的方向,那麼通過重新考慮你的架構可能會更好。 Dan Wahlin擁有使用ADO.Net的good example of building an n-layer application。你可能會從他的代碼示例中得到一些好的想法,這可能會在未來幫助你。

Creating an N-Layer ASP.NET Application - Video

Direct Code download