Класс соединения SQL против класса - .NET - PullRequest
2 голосов
/ 01 ноября 2010

Приветствую всех.

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

Мы запрограммировали библиотеку DLL базы данных для нашего отдела, эта DLL может получать соединения SQL, создавать таблицы данных, наборы данных, выполнять команды Sql, создавать программы чтения и т. Д. Она в основном использует все основные методы для подключения к БД и упаковывает ихв одну DLL, чтобы все использовали одну и ту же DLL и работали с ней согласованно, вместо того чтобы каждый делал свой собственный класс соединения.Что может стать проблематичным.

Мы также пытаемся проникнуть в ООП, и при этом мы не позволяем людям использовать модули.Но, на мой взгляд, модуль может лучше всего подойти для ссылки на объект для этой библиотеки DLL, поскольку он будет использоваться во всем проекте, где нам, в основном, придется создавать новый экземпляр объекта БД.Каждый класс должен иметь свой собственный объект БД, и именно здесь возникают накладные расходы, зачем беспокоиться о наличии 8 разных объектов Sql Connection для каждого класса, когда вы можете использовать общий объект через модуль.Если только мы не проходим наследование и не имеем его на базовом уровне всех уровней наследования.

В принципе, есть ли другой способ, о котором я не думаю?Я просто ловлю некоторые идеи.

Спасибо, ребята!

Ответы [ 3 ]

1 голос
/ 01 ноября 2010

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

Во-первых, объекты в целомочень легкий в .NET.Более конкретно, хотя;объекты ADO.NET, которые вы будете использовать здесь - DbConnection, DbCommand, DbDataReader и т. д., также очень легковесны.

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


Тем не менее;Я думаю, что до полного запрета ВСЕХ статических классов / модулей еще немного.Их, безусловно, можно найти много полезных.

1 голос
/ 01 ноября 2010

Существуют разные подходы для разных проектов. Шаблоны разработки программного обеспечения нацелены на сценарии большого объема и на то, как сделать их масштабируемыми. Это повлияет на дизайн, где и как открывать / закрывать соединения.

Но точка, которая относится ко всем:

Одиночная ответственность: код для открытия соединения должен быть в одноместном месте. Это может быть Module, который является статическим классом, или класс, экземпляр которого вы создаете. Если вы или ваши коллеги открываете связь более чем в одном месте, значит, что-то не так. Этот вид кода всегда выполняется в различных средах Microsoft, таких как блоки приложений, а затем и другие.

Так какой из них лучше: статический вспомогательный метод или экземпляр класса, который реализует функцию? Если вы проводите модульное тестирование, тогда статический бесполезен, так как вы не можете его смоделировать (хотя это можно сделать с помощью специальных инструментов для проверки, таких как TypeMock или JustMock)

1 голос
/ 01 ноября 2010

Нет смысла запрещать модули как не объектно-ориентированные.Модули в VB.NET являются объектно-ориентированными.Модуль скомпилирован как тип с закрытым конструктором и со всеми его методами и полями, установленными в shared (он же static в C #).

Думаю, что вы подразумеваете, что более важный вопрос заключается в том, является ли подключение к вашей базе данныхкласс должен быть одноэлементным (то есть общим) или нет. Синглеты имеют проблем с дизайном , особенно в отношении потоков.По сути, синглтон - это просто набор глобальных переменных, и мы знаем, насколько хорошо это работает в большинстве систем.Также SqlConnection pooling очень эффективен.

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

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