在Dao类中使用静态方法或非静态方法?

dan*_*yy1 13 static dao class

嗨我为一些数据库操作生成Dao类

以这种方式使Dao类的方法静态或无静态更好?

使用下面的示例dao类,moref多个客户端同时使用AddSampleItem方法?这可能会导致什么结果?

public class SampleDao
{
  static DataAcessor dataAcessor 

  public static void AddSampleItem(object[] params)
  {
      dataAcessor =new DataAcessor();
       //generate query here
       string query="..."
      dataAcessor.ExecuteQery(query);
      dataAcessor.Close(); 
   }

  public static void UpdateSampleItem(object[] params)
  {
      dataAcessor =new DataAcessor();
       //generate query here
       string query="..."
      dataAcessor.ExecuteQery(query);
      dataAcessor.Close(); 
   }
}
Run Code Online (Sandbox Code Playgroud)

bru*_*nde 12

这会导致一团糟.如果您同时从不同的线程添加2个项目,您肯定会得到非常奇怪的结果,如果一个线程在另一个线程DataAcessor完成之前关闭,则会出现错误.

我会使用本地DataAcessor或创建一个新的,并在所有方法中使用它,具体取决于您希望如何管理生命周期DataAcessor.

public class SampleDao
{
  public void AddSampleItem(object[] params)
  {
      DataAcessor dataAcessor =new DataAcessor();
      // ...
  }

  public void UpdateSampleItem(object[] params)
  {
      DataAcessor dataAcessor =new DataAcessor();
      // ...
  }
}
Run Code Online (Sandbox Code Playgroud)


blo*_*rod 6

我总是喜欢非静态类.依赖关系不能注入静态类,单元测试也更难.此外,它们的客户在进行单元测试时无法用测试双替换它.

http://googletesting.blogspot.com/2008/12/static-methods-are-death-to-testability.html