嗨我为一些数据库操作生成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)
我总是喜欢非静态类.依赖关系不能注入静态类,单元测试也更难.此外,它们的客户在进行单元测试时无法用测试双替换它.
http://googletesting.blogspot.com/2008/12/static-methods-are-death-to-testability.html