Привет я генерирую классы Дао для некоторых операций DB
в этом создании способа методы класса Дао как статичный или ни одно статическое лучше?
Используя демонстрационный класс дао ниже, İf больше чем один клиент добрался для использования метода 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();
}
}
Это привело бы к большому беспорядку. Если вы добавляете 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();
// ...
}
}
этот код не является потокобезопасным в том виде, в котором вы его написали.
если у вас есть поле dataAccessor и такие статические методы, у вас будут проблемы с параллелизмом, когда несколько клиентов будут одновременно обращаться к этому коду. вполне вероятно, что у вас будут возникать очень странные исключения, и даже возможно, что один клиент может видеть данные другого клиента.
избавьтесь от статики в этих методах и в этом поле и создайте новый экземпляр SampleDao для каждого клиента.
Я всегда предпочитаю нестатические классы. Зависимости нельзя внедрить в статический класс, а модульные тесты сложнее. Кроме того, его клиенты не могут заменить его тестовым двойником, когда они проходят модульное тестирование.
http://googletesting.blogspot.com/2008/12/static-methods-are-death-to-testability.html