Frameworks 如何在CFML中引用全局函数库?

Frameworks 如何在CFML中引用全局函数库?,frameworks,coldfusion,railo,cfml,code-structure,Frameworks,Coldfusion,Railo,Cfml,Code Structure,依赖项注入允许您避免直接引用对象外部的对象和范围。而是引用注入的依赖项 我想知道全局函数库的最佳实践。我当前将函数存储在服务器作用域中。我希望我的项目很快成为开源的,并且易于其他开发人员理解。我希望应用程序更容易编写单元测试,并且更松散地耦合 我应该将服务器作用域注入到每个使用全局函数的对象中吗 或者,在引用这些函数时,我是否应该对该规则做一个例外,并将“server.functions.myFunction()”范围直接放在组件中 以下是代码示例: 方法1: <cfcomponent&g

依赖项注入允许您避免直接引用对象外部的对象和范围。而是引用注入的依赖项

我想知道全局函数库的最佳实践。我当前将函数存储在服务器作用域中。我希望我的项目很快成为开源的,并且易于其他开发人员理解。我希望应用程序更容易编写单元测试,并且更松散地耦合

我应该将服务器作用域注入到每个使用全局函数的对象中吗

或者,在引用这些函数时,我是否应该对该规则做一个例外,并将“server.functions.myFunction()”范围直接放在组件中

以下是代码示例:

方法1:

<cfcomponent>
    <cffunction name="init">
        <cfscript>
           server.functions.myFunction();
        </cfscript>
    </cffunction>
</cfcomponent>

server.functions.myFunction();
方法2:

<cfcomponent>
    <cffunction name="init">
        <cfargument name="serverScope" type="struct" required="yes">
        <cfscript>
            variables.serverScope=arguments.serverScope;
            variables.serverScope.functions.myFunction();
        </cfscript>
    </cffunction>
</cfcomponent>

variables.serverScope=arguments.serverScope;
variables.serverScope.functions.myFunction();

我从来没有抽出时间来正式回答这个问题。根据你在评论中所说的,我会这样做:

  • 将全局库分解为更多特定于用途的组件,然后将这些组件视为对象(有状态),或者-出于所有意图和目的,将其视为静态库(无状态)
  • 是的,使用依赖注入只注入给定情况下所需的依赖项

我不会为了权宜之计而破坏封装。

这个全局库中有多少函数,以及您要将它们注入的每个组件将使用它们的百分比是多少?我对“全局函数库”之类的东西很谨慎,我希望将它们更多地分解为基于目的的组件,并将它们注入到需要它们的组件中。如果看不到库中的函数,很难判断,但听起来这里可能需要看一些重组?我可以问一下,为什么您使用服务器作用域而不是应用程序作用域吗?@NotJustClarkKent我有100多个站点使用相同的功能。上载新源代码时,我手动将更新同步到服务器作用域。@AdamCameron示例:电子邮件和其他验证。基于查询生成select元素(和其他HTML元素)。自定义HTML/javascript接口。文件/目录i/o、cfhttp请求发布/验证等。该语言内置的几乎所有内容都使用一个自定义版本包装,该版本可以完成更多功能。与cfinsert不同,我有自己的动态查询功能。我知道我的一些函数需要成为对象,如果它们试图维护状态,但有些函数并不意味着要成为对象。如果社区希望看到这些组件,我不介意将它们放入组件中。@NotJustClarkKent我应该注意,我的实际框架确实将数据放入应用程序和服务器范围,这取决于域或整个服务器的唯一性。我将所有这些变量放在另一个键中,以防止名称空间受到污染。例如,Application.zos和Server.zos就是一切的归宿。