[C#] 把一個數據庫初始化調用放在C#構造函數中可以嗎?


Answers

那麼..我不會。 但是我的方法再次涉及到類不負責檢索自己的數據。

Question

我已經看到這是各種代碼庫,並想知道這是否通常皺眉或不。

例如:

public class MyClass
{
   public int Id;

   public MyClass()
   {
      Id = new Database().GetIdFor(typeof(MyClass));
   }
}



我可以想到的唯一的問題是,從數據庫初始化中的任何錯誤都將作為構造函數的異常傳播。




如果引用數據庫連接,則可以使用一次性模式:

public class MyClass : IDisposable
{
    private Database db;
    private int? _id;

    public MyClass()
    {
        db = new Database();
    }

    public int Id
    {
        get
        {
            if (_id == null) _id = db.GetIdFor(typeof(MyClass));
            return _id.Value;
        }
    }

    public void Dispose()
    {
        db.Close();
    }
}

用法:

using (var x = new MyClass()) 
{
    /* ... */

} //closes DB by calling IDisposable.Dispose() when going out of "using" scope