Передача данных через слои
От: Бодряк  
Дата: 19.02.07 10:01
Оценка:
Имеется:
— Web-приложение, состоящее из 3 уровней (UI, Business, Data)
— N баз данных (db1, db2, ... dbN)
— N пользователей этих БД (user1, user2, ... userN)

Бизнес-логика:
— Любой пользователь может получать/изменять информацию из любой БД.
— Выбор пользователя и БД осуществляется на первой странице сайта (Login).

Чего хочется:
Очевидно, что Connection String к БД всегда будет формироваться динамически при каждом логине. И очень-очень хочется не передавать постоянно название базы и имя пользователя через слои, а как-нибудь "запомнить" их в Data Layer'e и использовать их там.

Вопрос:
Существует ли какой-нибудь унифицированный способ по реализации того, что хочется?
Re: Передача данных через слои
От: снежок Россия  
Дата: 19.02.07 15:10
Оценка:
Б>Чего хочется:
Б>Очевидно, что Connection String к БД всегда будет формироваться динамически при каждом логине. И очень-очень хочется не передавать постоянно название базы и имя пользователя через слои, а как-нибудь "запомнить" их в Data Layer'e и использовать их там.

Передавайте идентификатор билета безопасности (GUID), который выдается определенному пользователю, на определенную БД при авторизации.
Билет должен иметь срок действия, который при необходимости продляется или выдается новый билет.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Передача данных через слои
От: снежок Россия  
Дата: 19.02.07 15:12
Оценка:
Кстати, в P&P Security Application Block Есть кое что подсмотреть готовое по этому поводу.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Передача данных через слои
От: mogadanez Чехия  
Дата: 21.02.07 11:21
Оценка:
Здравствуйте, Бодряк, Вы писали:

Б>Чего хочется:

Б>Очевидно, что Connection String к БД всегда будет формироваться динамически при каждом логине. И очень-очень хочется не передавать постоянно название базы и имя пользователя через слои, а как-нибудь "запомнить" их в Data Layer'e и использовать их там.

я бы не сказал что "запомнить" их в DataLayer правильное решение.

Б>Вопрос:

Б>Существует ли какой-нибудь унифицированный способ по реализации того, что хочется?

Хз, насколько унифицированый, раскажу как у нас.

1. введение
есть веб приложение, у него есть возможность работать в multiDB режиме.
отделяются запросы к разным DB по сабхосту.
например:
основное приложение
http://hostname.com/APP
http://db1.hostname.com/APP — должен работать с базой db1
http://db2.hostname.com/APP — должен работать с базой db2

2. проблема
тут есть ряд проблем. то что у каждого сабаппликейшн должны быть свои настройки — это само собой.
кроме того хочется мочь зайти в _несконфигуренный_ sub_app и сконфигурить его в web interface на спец страничке.
далее, у приложения настроек может быть больше чем просто Conneсtion String, нужно чтобы они были также персональны для приложения.
еще одна проблема ( правда она вылезла уже в процессе) — это куки, они не должны пересекаться. причем не только аутентификационные, но и все.


3. решение
во первых, у нас активно используется ServiceLocator
далее выделяем 2 интерфейса ICookieNameProvider и IConfigSettingsProvider.
Service Locator по запросу отдает либо простую реализацию этих интерфейсов( если приложение не в МультиМоде ), или реализацию учитывающию
информацию из Urla.

например вызов в DAL выглядит так:
subsystem_factory.get<IConfigSettingsProvider>().getConnectionString();


для кукисов :
Cookies.Add( subsystem_factory.get<IConfigSettingsProvider>().getCookieName( "someKey" ), "value" );



немного сумбурно, но не знаю как объяснить лучше. если есть вопросы — пишите отвечу

ЗюЫю
Еще раз повторюсь все это лично наш опыт, никого склонять к нему не буду, но обсудить детали, недостаки, и т.д. — это запросто.
... << RSDN@Home 1.2.0 alpha rev. 662>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.