Делать Database-Class статичным? - PullRequest
       3

Делать Database-Class статичным?

8 голосов
/ 12 сентября 2011

В настоящее время у меня есть класс с именем «SqlData», который содержит все методы, необходимые для подключения к моей базе данных MS-SQL.

Он содержит методы для вставки, удаления и обновления различных типов таблиц - и, следовательно, используется во многих Windows моего приложения WPF.

Допустим, почти 90% моих WPF-Windows вызывают как минимум три метода моих методов SqlData для загрузки, вставки и обновления разных записей ...

В данный момент мне нужно создавать экземпляр моего Sql-класса в каждом окне - поэтому я думаю о том, чтобы сделать весь класс статичным, поэтому мне не нужно каждый раз создавать его экземпляр?

Но я также читал, чтобы не использовать статические классы при взаимодействии с внешними серверами, такими как веб-сервисы или базы данных.

Не могли бы вы дать мне какой-нибудь совет о том, как мне действовать?

Следуя нескольким методам, используемым в моем классе (bool возвращает true, когда оператор завершен, в противном случае - false):

public DataTable GetAllSomething (DataTable _data)

публичный bool WriteSomething (Объект что-то, вне введенного идентификатора)

public bool DeleteSomething (Объект что-то)

Спасибо!

Ответы [ 3 ]

5 голосов
/ 12 сентября 2011

В данный момент мне нужно создавать экземпляр моего Sql-класса в каждом окне - поэтому я думаю сделать весь класс статичным, чтобы мне не приходилось создавать его каждый раз?

Время, затраченное на создание экземпляра класса в .NET, настолько смехотворно мало , что вам не о чем беспокоиться.Лично я не использую статические классы, потому что они создают сильную связь между различными уровнями приложения, делая их более сложными для модульного тестирования в изоляции.

Поэтому я предпочитаю абстрагировать весь доступ к базе данных за интерфейсом (или абстрагироватькласс), а затем предоставить реализацию этого интерфейса для конкретной базы данных.

0 голосов
/ 12 сентября 2011

Я всегда создаю объект базы данных в начале моего приложения и передаю его конструкторам всех окон и классов, которые в этом нуждаются. Это дает мне возможность добавлять к нему данные, например строку подключения, которая необходима только в начале, и нет никакой вероятности, что методы будут вызваны до того, как будет установлено соединение с базой данных (как это может быть со статическим), потому что это делается в конструктор.

0 голосов
/ 12 сентября 2011

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

, даже если вы еще этого не делаете сейчас, вы можете вообразить, что в будущем вы сможете использовать какой-либо метод Dependency Injection, или вы можете написать модульные тесты с любой инфраструктурой тестирования, доступной в .NET, и в целом у вас будет много больше опций без статических классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...