2010-07-20 1 views
1

Я унаследовал большой сайт asp.net, который ссылается на сильно на информацию о сеансе.Перемещение приложения asp.net, основанного на сеансе, на n-уровневую архитектуру

Существует встроенная система, которая направляет необходимую информацию по мере необходимости через веб-службы, но сама программа не имеет базы данных, и все хранится в сеансе через кучу объектов данных, к которым обращаются непосредственно по всему приложению ,

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

Мой вопрос: какой рекомендуемый путь для достижения желаемой архитектуры?

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

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

Например, у вас есть объект данных клиента, хранящийся в сеансе. Если вы хотите изменить этого клиента, все, что вам нужно сделать, это установить локальную переменную в объект, хранящийся в сеансе. Затем вы можете обновить что-либо в объекте, установив mylocalvar.LastName = "blah"; Ваш объект сеанса теперь обновляется без каких-либо действий.

Кто-нибудь сделал что-нибудь подобное раньше, и есть идеи о шагах, которые я мог бы использовать для его достижения?

* note: Я не хочу отключать данные сеанса, но перепроектировать, как данные сохраняются и доступны.

ответ

1

Звучит как большая работа!

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

+1

+1 Мои мысли в точности - абстрагируйте его; и, как вы, придерживайтесь принципа разделения интерфейса. –

+0

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

+0

Итак, в какой момент локальные/глобальные переменные сохраняются в состояние сеанса после манипулирования? В этот момент, я предполагаю, именно там вы бы «сохранили» данные на новом уровне абстракции. –