Я унаследовал большой сайт asp.net, который ссылается на сильно на информацию о сеансе.Перемещение приложения asp.net, основанного на сеансе, на n-уровневую архитектуру
Существует встроенная система, которая направляет необходимую информацию по мере необходимости через веб-службы, но сама программа не имеет базы данных, и все хранится в сеансе через кучу объектов данных, к которым обращаются непосредственно по всему приложению ,
В конечном итоге я хочу попытаться перенести приложение в истинную архитектуру N-уровня и начать использовать базу данных вместо объектов данных, основанных на сеансах.
Мой вопрос: какой рекомендуемый путь для достижения желаемой архитектуры?
Я думаю, что первым шагом было бы создание уровня доступа к данным для доступа к объектам данных. Как только это будет сделано, я смогу заменить объекты данных базой данных.
Проблема в том, что объекты данных сеанса напрямую доступны извне в приложении. Поскольку эти объекты хранятся в сеансе, вы можете прямо устанавливать любые их свойства без каких-либо операций с данными. Это делается на протяжении всего приложения.
Например, у вас есть объект данных клиента, хранящийся в сеансе. Если вы хотите изменить этого клиента, все, что вам нужно сделать, это установить локальную переменную в объект, хранящийся в сеансе. Затем вы можете обновить что-либо в объекте, установив mylocalvar.LastName = "blah"; Ваш объект сеанса теперь обновляется без каких-либо действий.
Кто-нибудь сделал что-нибудь подобное раньше, и есть идеи о шагах, которые я мог бы использовать для его достижения?
* note: Я не хочу отключать данные сеанса, но перепроектировать, как данные сохраняются и доступны.
+1 Мои мысли в точности - абстрагируйте его; и, как вы, придерживайтесь принципа разделения интерфейса. –
Да, это будет сложно. То, что вы выложили, - это основное направление, о котором я думал. Самая большая проблема заключается в том, что не существует каких-либо стандартных механизмов управления данными, таких как явное сохранение данных, транзакций и т. Д. Приложение просто устанавливает локальную (обычно глобальную) переменную на уже существующий объект из сеанса, а затем непосредственно обновляет свои свойства по мере необходимости. Знаете ли вы о каких-либо трюках, которые помогут перейти от одного проекта к другому? – AaronS
Итак, в какой момент локальные/глобальные переменные сохраняются в состояние сеанса после манипулирования? В этот момент, я предполагаю, именно там вы бы «сохранили» данные на новом уровне абстракции. –