Ответ 1
Существует несколько областей, доступных для любой части вашего кода: Session, Client, Cookie, Application и Request. Некоторые из них нецелесообразно использовать определенным образом (т.е. Использовать область запроса или приложения внутри ваших пользовательских тегов или CFC, это coupling, нарушает инкапсуляцию принципы, и считается плохой практикой), а некоторые из них имеют особые цели: Cookie сохраняется на клиентской машине как физические куки, а переменные с областью действия зависят от пользователя и заканчиваются сеансом пользователя на веб-сайте.
Если переменная крайне маловероятна для изменения (константа для всех целей и целей) и может быть просто инициализирована при запуске приложения и никогда не будет написана снова, обычно вы должны поместить ее в область Приложения, потому что это сохраняется между каждым пользователем и каждой сессией, При правильной реализации он записывается один раз и читается N раз.
Правильная реализация переменных приложения в Application.cfm может выглядеть так:
<cfif not structKeyExists(application, "dsn")>
<cflock scope="application" type="exclusive" timeout="30">
<cfif not structKeyExists(application, "dsn")>
<cfset application.dsn = "MyDSN" />
<cfset foo = "bar" />
<cfset x = 5 />
</cfif>
</cflock>
</cfif>
Обратите внимание, что наличие переменной в области приложения проверяется до и после блокировки, так что если два пользователя создают условие гонки при запуске приложения, только один из них в конечном итоге установит переменные приложения.
Преимущество такого подхода заключается в том, что он не будет постоянно обновлять эти сохраненные переменные при каждом запросе, теряя время пользователя и циклы обработки сервера. Компромисс в том, что он немного подробный и сложный.
Это было значительно упрощено с добавлением Application.cfc. Теперь вы можете указать, какие переменные создаются при запуске приложения, и не нужно беспокоиться о блокировке и проверке на существование и все эти забавные вещи:
<cfcomponent>
<cfset this.name = "myApplicationName" />
<cffunction name="onApplicationStart" returnType="boolean" output="false">
<cfset application.dsn = "MyDSN" />
<cfset foo = "bar" />
<cfset x = 5 />
<cfreturn true />
</cffunction>
</cfcomponent>
Для получения дополнительной информации о Application.cfc, включая все доступные различные функции и каждую мелочь о том, что и как ее использовать, Я рекомендую этот пост на блоге Раймонда Камдена.
Подводя итог, область запроса доступна везде в вашем коде, но это не обязательно делает ее "правильной" для ее использования повсюду. Скорее всего, ваш предшественник использовал его для разрушения инкапсуляции, и это может быть громоздким для реорганизации. Возможно, вам лучше оставить его как есть, но понимание того, какой объем является лучшим инструментом для работы, безусловно, сделает ваш будущий код лучше.