Ваш вопрос граничит с двумя совершенно отдельными вопросами (оба из которых важно уточнить и решить). Эти два вопроса:
- Должен ли я правильно указывать мои переменные при обращении к ним (т. Е. APPLICATION.settings vs. SESSION.settings).
Краткий ответ на этот вопрос: Да . Это обеспечивает более чистый, более читаемый / управляемый код и предотвращает столкновения области переменных, которые могут возникнуть позже при повторном использовании имен переменных.
Если вы создадите APPLICATION.settings и SESSION.settings, но попытаетесь ссылаться на них без области (т. Е. <cfset myvar = settings />
), у вас будут проблемы с конфликтами переменных, так как они будут по умолчанию вылиты в VARIABLES - поскольку ни ПРИЛОЖЕНИЕ, ни СЕССИЯ не рассматриваются для разрешения неоднозначности области.
Второй вопрос:
- Должен ли я беспокоиться о переменных, к которым обращаются в Application.cfc, которые могут совместно использоваться несколькими пользователями в параллельной среде?
Краткий ответ на этот вопрос: Да . Вы должны знать и понимать последствия того, как к вашим общим переменным обращаются, и <CFLOCK>
их, где это необходимо.
К сожалению, точно, когда и где вы блокируете ваши общие переменные, часто не разъясняется сообществу CF, поэтому позвольте мне подвести итог:
- onApplicationStart () однопотоковый доступ к области приложения. Вам не нужно блокировать переменные APPLICATION, которые читаются / записываются в этом методе.
- onSessionStart () однопотоковый доступ к области SESSION. Тот же ответ, что и раньше.
- Если вы предоставляете любой механизм, который обращается к SESSION или APPLICATION из метода onRequestStart () - или любого другого шаблона впоследствии (такого как параметр перезагрузки URL, который напрямую вызывает onApplicationStart ()) - -все ставки сняты - теперь вы должны правильно обработать блокировку чтения и записи вашей общей переменной.