Используя Статические методы или ни один статические методы в Классе Дао?

Привет я генерирую классы Дао для некоторых операций 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(); 
   }
}
13
задан dankyy1 26 March 2010 в 14:05
поделиться

3 ответа

Это привело бы к большому беспорядку. Если вы добавляете 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();
      // ...
  }
}
12
ответ дан 1 December 2019 в 22:38
поделиться

этот код не является потокобезопасным в том виде, в котором вы его написали.

если у вас есть поле dataAccessor и такие статические методы, у вас будут проблемы с параллелизмом, когда несколько клиентов будут одновременно обращаться к этому коду. вполне вероятно, что у вас будут возникать очень странные исключения, и даже возможно, что один клиент может видеть данные другого клиента.

избавьтесь от статики в этих методах и в этом поле и создайте новый экземпляр SampleDao для каждого клиента.

3
ответ дан 1 December 2019 в 22:38
поделиться

Я всегда предпочитаю нестатические классы. Зависимости нельзя внедрить в статический класс, а модульные тесты сложнее. Кроме того, его клиенты не могут заменить его тестовым двойником, когда они проходят модульное тестирование.

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

6
ответ дан 1 December 2019 в 22:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: