1

我想知道是否有人对他们认为在冷融合中存储和访问自定义功能的最佳方式有什么想法。

我目前在做什么:目前我有各种 CF 组件,我在其中存储相关功能。例如:

    <cfcomponent displayname="Math">
        <cffunction name="func1">
            <!---Code--->
        </cffunction>

        <!---Function 2, Function 3, etc.---->
    </cfcomponent>

然后,当我需要在页面上使用它们时,我会执行以下操作

    <cfset lv_math_obj = createobject("component","cfc.Math")>
    <cfset variable = lv_math_obj.myFunction(parameter)>

为什么我喜欢它:上面的代码易于阅读和理解,并且我的函数是预编译的!

为什么我不喜欢它:对象不应该是相互独立工作的函数列表。

有没有人想到更好的方法来存储和访问自定义函数?

4

2 回答 2

1

您目前正在做的事情本身并没有错,但是对于您要实例化的每个请求,cfc.Math这在 CF9+ 中不应该出汗,但不是必需的。

您可以通过实例化一次onApplicationStart()并将对象放入Application范围来优化它。但是,这样做会使调用 UDF 变得相当冗长,即Application.math.func1(). 您可以设置Variables.math = Application.mathonRequest()然后您的所有 CFM 都可以访问math.anyFunc(). 要使任何 CFC 方法都可以访问您的 UDF,您可以考虑将 UDF 放入FormUrl作用域中,以避免需要使用作用域前缀。

此外,当您cfc.Math更新时,您需要通过执行大多数框架所做的(例如?init=true,在 中检测到onRequestStart(),并执行重新初始化)来清除旧副本,或者重新启动应用程序。

IMO 最简单的方法是将 UDF 放入 amath.cfm并在我需要使用它们之前将其包含在内。

于 2013-06-19T19:26:27.423 回答
0

您可以将经常使用的函数放在请求范围内。

<cffunction name="OnRequestStart" access="public" returntype="boolean" output="false">
    <cfargument name="TargetPage" type="string" required="true"/>
    <cfinclude template="/udfs/global.cfm">
    <cfreturn true />
</cffunction>

我发现这很容易使用。也可以将组件或功能放在应用程序范围内,但正如亨利指出的那样,当您开发或更改网站时,这可能真的很烦人。

如果您将函数放在请求范围内,则需要引用该函数。例如,包含的 /udfs/global.cfm 文件可能包含以下函数:

<cffunction name="func1">
<!---Code--->
</cffunction>
<cfset request.func1 = func1>

在应用程序中,您可以使用以下语句调用此函数:

<cfset test = request.func1()>
于 2013-06-25T17:27:03.030 回答