3

我们有四种不同的环境:dev、q/a、test 和 prod。我决定将我们转换Application.cfmApplication.cfc并将它们放入我们的源代码控制中。有很多应用程序变量对每个环境都有不同的值。

我最终创建了几个 sql server 表来根据它们的类型存储这些环境变量。现在,我正在动态设置这些应用程序变量。

我的问题是我开始在 application.cfc 中添加自定义方法。我不是 100% 确定这是否是最好的地方。[例如:getAppLinks()、setAppLinks()]。否则,我可以创建一个新的 cfc 并从Application.cfc.

所有这些方法当前都在方法中被调用一次onApplicationStart()

有人对在中实现自定义方法有任何意见Application.cfc吗?

谢谢

编辑:添加了一个自定义方法:

 <cffunction name="setUpAppDSNs" access="private" returnType="void" output="false">
    <cfargument name="dsn"        type="string" required="yes">
    <cfargument name="serverName" type="string" required="yes">
    <cfscript>
        var dsnNames   = structNew();           
        var qryAppDSNs = new Query(dataSource = '#arguments.dsn#',  
                                   sql        = ' SELECT dsnID, #arguments.serverName#Server, description
                                                  FROM cfAppDSN ').execute().getResult();  
         for (i = 1; i lte qryAppDSNs.recordCount; i++) {
            dsnNames['#qryAppDSNs.description[i]#'] = qryAppDSNs['#serverName#Server'][i]; 
         }

         StructAppend(application,dsnNames);
    </cfscript>
</cffunction>
4

2 回答 2

4

我有一个类似的问题,并通过使用我们的 globalFunctions.cfc 扩展 application.cfc 来解决它

<cfcomponent displayname="Application" 
     output="false" extends="shared.cfc.globalFunctions">

我不知道这是否对您有用,但它允许我们在多个不同的应用程序中使用相同的功能,而无需维护这些功能的多个副本。

于 2013-01-03T15:50:53.327 回答
3

Application.cfc 只是一个 CFC。关于它的唯一“特殊”事情是:

  1. CF 每次请求都会实例化它的一个实例;
  2. 巧合的是,ColdFusion 会在其中寻找一些事件处理程序和拦截器(onApplicationStart() 等)。

但它仍然只是一个 CFC。鉴于它被称为 Application.cfc 并忙于应用程序生命周期,因此将与应用程序生命周期相关的方法放入其中是有意义的 - 与组织任何 CFC 相同。

所以回答你的问题...... Application.cfc 正是你这些方法的正确位置。

于 2013-01-03T21:52:42.303 回答