在coldfusion中访问自定义函数的最佳方法是什么?

时间:2013-06-19 18:37:05

标签: coldfusion

我想知道是否有人想过他们认为在coldfusion中存储和访问自定义函数的最佳方式。

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

    <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)>

为什么我喜欢它:上面的代码易于阅读和理解,我的功能已经预编译了!

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

有没有人想过更好的存储和访问自定义功能的方法?

2 个答案:

答案 0 :(得分:1)

你目前所做的事情本身并没有什么不妥,但对于每个请求你都要实例化cfc.Math,这不应该在CF9 +中扼杀,但不是必需的。

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

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

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

答案 1 :(得分: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()>