Вставить строку подключения из app.config против чтения из класса BaseDataProvider - PullRequest
2 голосов
/ 27 января 2012

Видите ли вы какую-либо выгоду в добавлении строки подключения к базе данных из класса Global.asax.cs в ASP.NET MVC по сравнению с методом чтения строки подключения из класса BaseDataProvider, который обращается к файлу app.config?

Ответы [ 2 ]

3 голосов
/ 27 января 2012

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

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

Например, если вы пытаетесь создать экземпляр класса в тестовом жгуте (при выполнении интеграционного тестирования):

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

Обновление: Другое преимущество подхода с использованием конструктора заключается в том, что он отсоединяет сам класс от механизма получения строки соединения из app.config.

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

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

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

0 голосов
/ 27 января 2012

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

Тогда мой класс Global.asax содержит необходимую логику, чтобы определить, какая строка подключения им может понадобиться в данной ситуации.Например, допустим, что ваше веб-приложение развернуто на международных серверах по всему миру, вы хотите подключиться к ближайшему доступному серверу БД, чтобы избежать проблем с задержкой.Таким образом, при входе в систему я выясняю, где находится мой пользователь, а затем настраиваю его с соответствующим подключением

...