Инкапсуляция в управлении сессиями

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

 

Основы инкапсуляции

Слово «инкапсуляция» один из таких терминов, которые означают несколько вещей и в большинстве случаев неправильно используются. Но все намного проще. Инкапсуляция - это технология, при которой приложения разделены на части таким образом, что коду не нужно знать внутреннюю сторону работы вещей.

Например, хранимые процедуры – одна из самых известных форм инкапсуляции. Хранимые процедуры содержат одну и более SQL инструкций, но все они скрыты от пользователя, который осуществляет запросы к хранимой процедуре для получения результатов ее работы. Не важно, что происходит внутри хранимой процедуры. Важно то, что она работает и выполняет то, что от нее требуется.

Пользовательские теги ColdFusion (скорее хорошо написанные пользовательские теги) часто являются еще одной формой инкапсуляции. Тег вызывается для осуществления неких операций, которые скрыты внутри тега.

Таким образом, инкапсуляция выполняет следующее:

 

ColdFusion компоненты и инкапсуляция

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

Двумя самыми важными аспектами компонент является то, что они могут хранить внутри себя данные, а также существовать продолжительное время. Позвольте объяснить. Внутри каждой компоненты есть специальный контейнер переменных, называемый this. Контейнер this содержит некоторые данные, определяемые по-умолчанию, но также может хранить и ваши собственные данные. Например, приведенный ниже метод принимает два аргумента, которые затем сохраняет в контейнере this:
Чтобы вызвать этот код, мы используем следующий код (предполагая, что приведенный метод сохранен в файле user.cfc):
Теперь мы создадим метод, который будет возвращать строку, содержащую полное имя:
Таким образом, метод setName сохраняет имя, а метод getName возвращает сохраненное имя. Код, сохраняющий и получающий полное имя, будет выглядеть так:
Для осуществления той же цели CFML предлагает и несколько иной синтаксис. Так, создание объекта компоненты можно осуществлять следующим образом:
А определение переменной fullName можно делать так:
Какой из вариантов подходит больше, решать вам.

 

Инкапсуляция сессии

Только что рассмотренный нами пример, показал, что объект компоненты можно создавать в контейнере variables. Но также можно использовать и другие типы контейнеров:

или
Пример создания компоненты в контейнере session возвращает нас к управлению сессиями. Вместо того, чтобы создавать разного вида переменные сессии в пределах вашего приложения, вы можете создать только одну переменную сессии – объект (ColdFusion компонента). Если ваше приложение использует данные о пользователе, то мы можем создать компоненту user.cfc, которая будет хранить всю информацию о пользователе (включая получаемую информацию из базы данных). Чтобы проверить, авторизирован ли пользователь, мы можем использовать такой код:
Страница авторизации может произвести авторизацию пользователя (если нужно) и создать объект пользователя, помещенный в контейнер session:
Вам может потребоваться проинициализировать объект для создания в нем контейнера this, в котором будет храниться информация о пользователе (имя, цвет, язык и т.д.). Возможно, вам понадобится передавать в компоненту ID пользователя, чтобы определить, авторизирован он или нет:
Метод init() должен возвращать true или false. Также, вероятно перед каждым вызовом методов компоненты понадобится знать, был ли вызов метода init().

А как насчет закрытия сессии пользователя? Просто. Достаточно удалить одну переменную сессии:

С помощью компоненты user.cfc вы можете делать все что угодно. Возможно, вам понадобится создать в ней методы: Если вам понадобится новый метод, то просто добавьте его в компоненту, а код клиента, который использует эту компоненту, не должен ничего знать и внутренней работе объекта.

Все это происходит незаметно от пользователя. Рассмотрим пример с оформлением заказа в электронном магазине. Оформляемый заказ хранится в контейнере session, а не в массиве, структуре или массивах структур. Чтобы начать оформление заказа, следует создать "корзину":

При добавлении в корзину нового товара, мы вызываем метод addItem():
Другие методы должны будут обновлять или удалять товары из корзины. Вероятно, вам понадобится метод list(), который будет возвращать результат запроса к объекту с выбранными товарами (источник данных предварительно создается функцией queryNew()). Нет никаких границ того, что вы можете делать в компоненте, которая в свою очередь может развиваться независимо от использующего его кода.

 

Заключение

ColdFusion компоненты – это объекты. Компоненты облегчают инкапсуляцию данных и логику, а также могут существовать продолжительное время. Эти две характеристики делают компоненты превосходным средством управления сессиями. Описанная здесь техника может быть использована в любом приложении, позволяя упростить и улучшить ваш код.


Источник: Encapsulating Session State Management

 


Hosted by uCoz