Нужны ли переменные внутри функций Application.cfc? - PullRequest
3 голосов
/ 18 ноября 2011

Вопрос к толпе.Мы очень строги в нашей команде относительно определения локальных переменных внутри функций в наших CFC.Недавно, однако, встал вопрос о области видимости переменных внутри Application.cfc.Неужели переменные с незаданной областью в функциях, таких как onRequestStart (), подвержены такому же риску одновременного доступа к другим сеансам, поскольку мы знаем, что локальные переменные в функциях в других компонентах есть?Или они как-то трактуются по-разному из-за характера функций в Application.cfc?

1 Ответ

12 голосов
/ 18 ноября 2011

Ваш вопрос граничит с двумя совершенно отдельными вопросами (оба из которых важно уточнить и решить). Эти два вопроса:

  1. Должен ли я правильно указывать мои переменные при обращении к ним (т. Е. APPLICATION.settings vs. SESSION.settings).

Краткий ответ на этот вопрос: Да . Это обеспечивает более чистый, более читаемый / управляемый код и предотвращает столкновения области переменных, которые могут возникнуть позже при повторном использовании имен переменных.

Если вы создадите APPLICATION.settings и SESSION.settings, но попытаетесь ссылаться на них без области (т. Е. <cfset myvar = settings />), у вас будут проблемы с конфликтами переменных, так как они будут по умолчанию вылиты в VARIABLES - поскольку ни ПРИЛОЖЕНИЕ, ни СЕССИЯ не рассматриваются для разрешения неоднозначности области.

Второй вопрос:

  1. Должен ли я беспокоиться о переменных, к которым обращаются в Application.cfc, которые могут совместно использоваться несколькими пользователями в параллельной среде?

Краткий ответ на этот вопрос: Да . Вы должны знать и понимать последствия того, как к вашим общим переменным обращаются, и <CFLOCK> их, где это необходимо.

К сожалению, точно, когда и где вы блокируете ваши общие переменные, часто не разъясняется сообществу CF, поэтому позвольте мне подвести итог:

  1. onApplicationStart () однопотоковый доступ к области приложения. Вам не нужно блокировать переменные APPLICATION, которые читаются / записываются в этом методе.
  2. onSessionStart () однопотоковый доступ к области SESSION. Тот же ответ, что и раньше.
  3. Если вы предоставляете любой механизм, который обращается к SESSION или APPLICATION из метода onRequestStart () - или любого другого шаблона впоследствии (такого как параметр перезагрузки URL, который напрямую вызывает onApplicationStart ()) - -все ставки сняты - теперь вы должны правильно обработать блокировку чтения и записи вашей общей переменной.
...