Ввод данных в область применения - PullRequest
1 голос
/ 12 февраля 2010

Для моих таблиц поиска, которые одинаковы для каждого пользователя в приложении, я делаю

Application.objectname = createobject(...).init(datasource)

в методе init я прочитал таблицу в область видимости следующим образом:

cfquery name="this.queryname"
return this

Теперь, когда мне нужно сослаться на запрос, я могу ссылаться на него так:

cfselect query="Application.objectname.queryname" ...

В: Что-то не так с этим?

Ответы [ 3 ]

3 голосов
/ 12 февраля 2010

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

В качестве вопроса стиля я бы предложил сделать ваш запрос частным свойством (в области действия variables в CFC), а не общедоступным (в области действия this CFC). Если свойство объекта является общедоступным, это означает, что, как дизайнер черного ящика, вы согласны с тем, что неизвестный разработчик перезаписывает значение. Если вы храните эти таблицы поиска в базе данных, я предполагаю, что вы хотите, чтобы эти данные были доступны только для чтения. Учтите следующее:

<cfcomponent hint="Proxy for database lookup tables" output="false">
    <cfproperty name="variables.lookupTable1" type="query" hint="[Private] lookupTable1 query object." />
    <cfproperty name="variables.lookupTable2" type="query" hint="[Private] lookupTable2 query object." />
    <!--- Implicit initialization --->
    <cfscript>
        variables.lookupTable1 = QueryNew('');
        variables.lookupTable2 = QueryNew('');
    </cfscript>

    <!--- Active initialization --->
    <cffunction name="init" returntype="void" access="public" hint="Initializes the query objects with data." output="false">
        <cfargument name="dsn" type="string" required="true" hint="The datasource to use." />
        <cfquery name="variables.lookupTable1" datasource="#arguments.dsn#">
            SELECT * FROM [TblFoo]
        </cfquery>
        <cfquery name="variables.lookupTable2" datasource="#arguments.dsn#">
            SELECT * FROM [TblBar]
        </cfquery>
    </cffunction>

    <!--- Data Fetching Methods --->
    <cffunction name="getFoo" returntype="query" access="public" hint="Returns the contents of TblFoo." output="false">
        <cfreturn variables.lookupTable1 />
    </cffunction>

    <cffunction name="getBar" returntype="query" access="public" hint="Returns the contents of TblFoo." output="false">
        <cfreturn variables.lookupTable2 />
    </cffunction>
</cfcomponent>
1 голос
/ 12 февраля 2010

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

Если вы не устанавливаете переменные области приложения в onApplicationStart() или onServerStart(), не забудьте использовать <cflock>

1 голос
/ 12 февраля 2010

Синтаксически, нет. Однако я предполагаю, что вы также включили атрибут «name» в этот тег cfselect, поскольку он необходим.

...