где разместить строку подключения в n-уровневом приложении? - PullRequest
2 голосов
/ 09 сентября 2009

Я создал DAL, используя сущность framwerok. Я также создал слой бизнес-сервисов и слой презентаций (веб-приложение). По общему мнению, строка подключения должна быть только в DAL, но для уровня представления также нужна строка подключения.

Так, что является лучшей практикой для этой ситуации? Есть ли способ иметь строку подключения только в DAL?

Ответы [ 5 ]

4 голосов
/ 09 сентября 2009

Вы обычно помещаете строку подключения в файл конфигурации, и файл конфигурации, который используется, является тем для исполняющей сборки. Для веб-сайта это будет web.config.

Зачем вашему уровню представления необходим доступ к строке подключения?

2 голосов
/ 09 сентября 2009

Слой абстракции данных должен быть единственным местом доступа к вашим данным. Ваш уровень представления должен использовать уровень бизнес-сервисов, а уровень бизнес-сервисов должен использовать DAL для доступа к данным. Таким образом, вам не потребуется прямой доступ к источнику данных из уровня представления, и единственное место для строки подключения будет в DAL.

2 голосов
/ 09 сентября 2009

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

2 голосов
/ 09 сентября 2009

Ваша строка подключения обычно находится в web.config и доступна к ней. Вы, вероятно, никогда не должны жестко кодировать строку подключения, если у вас нет другого выбора (и я не могу вспомнить ни одной ситуации, когда вы этого не сделаете).

0 голосов
/ 10 сентября 2009

У меня есть DAL, который принимает строку подключения в качестве параметра при ее создании. Слой, использующий DAL, отвечает за его получение. Таким образом, DAL не меняется, если он находится в Windows или веб-приложении. Мой DAL также создается только один раз для каждого приложения с использованием шаблона синглтона, поэтому накладные расходы на получение строки подключения оплачиваются только один раз.

        public sealed class cApp
        {

        static readonly cDB _cDB = new cDB(
    ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString);

        public static cDB DB
            {
                get
                {
                    return _cDB;
                }
            }

        }

Тогда в коде я могу использовать его как:

    GridView1.DataSource = cApp.DB.GetStages(id);
   GridView1.DataBind();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...