В C # почему строка подключения не отображается как объект? - PullRequest
0 голосов
/ 30 августа 2018

Есть ли какая-то конкретная причина, по которой я упускаю, для того, чтобы строка подключения была нужна как строка, но не отображалась как объект? Я имею в виду, почему мы должны всегда создавать строку этой уродливой формы 'Data Source=MSSQL1;Initial Catalog=AdventureWorks;Integrated Security=true', если мы можем установить точно такие же параметры в объекте, предоставляемом каким-либо сервисом внедрения зависимостей. Или что-нибудь еще, что избавляет нас от необходимости изучать ключевые слова наизусть.

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

На ваш вопрос можно ответить в двух частях.

Во-первых, настройки подключения представлены в виде строк, потому что они обычно устанавливаются в конфигурации и не изменяются при развертывании приложения. Как только они установлены, они установлены и редко, если когда-либо, должны быть изменены. Итак, единственная строка, которая представляет соединение в конфигурации, - это, как правило, все, что нужно. Это просто и понятно.

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

0 голосов
/ 30 августа 2018

IMO самая важная причина - побудить разработчиков хранить всю строку подключения в качестве параметра конфигурации.

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

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

Вероятно, историческая причина этого заключается в том, что строки подключения различаются в зависимости от поставщика ADO.NET, а ADO.NET предназначен для включения кода, независимого от поставщика. Начиная с .NET 2.0 вы можете даже кодировать сквозные приложения, которые не зависят от времени компиляции от конкретного поставщика ADO.NET. См. Обзор модели ADO.NET Facory

0 голосов
/ 30 августа 2018

TL; DR: Основная причина заключается в том, что строки подключения должны находиться в файле конфигурации . Это означает, что данные должны соответствовать формату файла конфигурации. Простая строка (в отличие от набора свойств) работает для каждого типа конфигурационного файла и не требует специфичного для формата синтаксиса, например, для файл конфигурации JSON или XML.


Во-вторых, не каждая строка подключения использует одинаковые свойства. Некоторые свойства являются взаимоисключающими (например, встроенная защита и учетные данные для входа), некоторые свойства имеют разные имена для разных поставщиков данных.

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

Обновление - Это список свойств строки подключения для конкретного подключения к службам Analysis Services. Это даже не учитывает других поставщиков данных, и посмотрите, насколько сложен сбор свойств.

Если бы вы сделали объект, представляющий вашу строку соединения, вам пришлось бы предоставить все возможные свойства, что больше, чем нужно среднему разработчику, что приводит к большому количеству избыточности (и пусто) настройки.

В-третьих, вы часто не просто меняете один настроек строки подключения. Строки подключения рассматриваются как единое целое, поскольку после их создания вы в основном работаете с «строкой подключения DEV» или «строкой подключения TEST».
С этой целью часто безопаснее просто думать о строках соединения как о целых объектах, а не о совокупности свойств.

Наконец, если вы действительно хотите определить строку подключения по отдельным свойствам, вы все равно можете это сделать. SqlConnectionStringBuilder существует именно для этой цели.

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

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