2012-12-17 93 views
0

1)設置在類哪種方法可以在類中建立數據庫連接?

//controller 
using(Connection conn = new Connection()){ 
conn.Open(); 
MyClass myclass = new MyClass(); 
myclass.setDbConnection(conn); 
} 

//MyClass in Model 
class MyClass { 
    Connection conn; 

    public setDbConnection(conn){ 
     this.conn = conn; 
    } 

    public updateTableA(){ 
     //using this.conn; 
    } 
    public updateTableB(){ 
     //using this.conn; 
    } 
    public updateTableC(){ 
     //using this.conn; 
    } 

} 

2)使用方法連接傳遞連接到每個方法參數

//controller 
using(Connection conn = new Connection()){ 
conn.Open(); 
MyClass myclass = new MyClass(); 
} 


//MyClass in Model 
class MyClass { 

    public updateTableA(Connection conn){ 
     //using conn; 
    } 
    public updateTableB(Connection conn){ 
     //using conn; 
    } 
    public updateTableC(Connection conn){ 
     //using conn; 
    } 
} 

哪個是正確的(或更好)的方法?爲什麼?

+2

答案:使用實體框架。 – SLaks

+0

我同意SLaks ...使用EF是MVC的最佳方式。 – Oluwafemi

回答

2

鑑於你的兩個選擇,我肯定會去第一個 - 在將連接傳遞給每個方法時(假設你總是使用相同的連接)絕對沒有附加值。這隻會給您的代碼添加很多噪音,從而掩蓋實際的業務邏輯。

此外,我會建議將連接傳遞給構造函數,並避免setDbConnection方法。這可以確保在調用構造函數後有一個工作對象,而不是在調用此方法之前將失敗的對象。但是這並不總是可行的,因此這種初始化方法有時是不可避免的。

最後,您應該考慮實施IDisposable,因爲您的類擁有一次性資源 - 連接 - 因此可能有責任在其生命週期結束時將其釋放。

我絕對支持其他用戶已經說過的 - 考慮使用像Entity Framework這樣的OR映射器,因爲滾動你自己的數據訪問層並不是微不足道的。

3

答案是,真的沒有一個好方法,因爲這種模式本質上是有缺陷的。您的數據對象不應該負責維護數據庫連接,也不應該與數據庫設計緊密結合。對象關係管理器已經證明自己是大多數數據庫應用程序更好的方法。你應該看看像Entity Framework或nHibernate這樣的流行的。我個人使用nHibernate。

+1

+1。這就像是問是否更好地服務黑燒牛排或燒意大利麪 - 老兄,更好地瞭解烹飪基礎知識。海報approacs都是如此的瑕疵,它甚至不好笑。 – TomTom

+0

@Spencer Ruport對不起,但我不明白,我不認爲#2方式不負責維護數據庫連接。我明白使用ORM更好,但是如果不使用ORM,我想知道你提到它的正確模式。你能幫我多一點嗎? –

相關問題