【发布时间】:2024-01-09 23:36:01
【问题描述】:
依赖注入允许您避免直接引用对象外部的对象和范围。您改为引用注入的依赖项。
我想了解全局函数库的最佳实践。我目前将我的功能存储在服务器范围内。我希望我的项目能尽快开源,并让其他开发人员易于理解。我希望应用程序更容易编写单元测试并且更松散耦合。
我应该将服务器范围注入到每个使用全局函数的对象中吗?
或者我应该破例,在引用这些函数时直接将“server.functions.myFunction()”作用域放在组件中?
以下是代码示例:
方法一:
<cfcomponent>
<cffunction name="init">
<cfscript>
server.functions.myFunction();
</cfscript>
</cffunction>
</cfcomponent>
方法二:
<cfcomponent>
<cffunction name="init">
<cfargument name="serverScope" type="struct" required="yes">
<cfscript>
variables.serverScope=arguments.serverScope;
variables.serverScope.functions.myFunction();
</cfscript>
</cffunction>
</cfcomponent>
【问题讨论】:
-
这个全局库中有多少个函数,你要注入它们的每个组件将使用它们的百分比是多少?我对“全局函数库”之类的东西持谨慎态度,并希望将它们更多地分解为基于目的的组件,并将 那些 注入需要它们的组件中。如果没有看到 lib 中的函数,很难判断,但听起来可能需要在这里进行一些重组?
-
我能问一下你为什么使用服务器范围而不是应用范围吗?
-
@NotJustClarkKent 我有 100 多个使用相同功能的站点。上传新源代码时,我手动将更新同步到服务器范围。
-
@AdamCameron 示例:电子邮件和其他验证。基于查询的选择元素(和其他 HTML 元素)的生成。自定义 HTML/javascript 界面。文件/目录 i/o、cfhttp 请求发布/验证等。该语言内置的几乎所有内容都包含在自定义版本中,功能更多。就像不是cfinsert,我有自己的动态查询。我知道如果我的一些函数试图保持状态,它们需要成为对象,但有些函数并不意味着是对象。如果这是社区期望看到的,我不介意将它们放入组件中。
-
@NotJustClarkKent 我应该注意到,我的实际框架确实将数据放在应用程序和服务器范围内,具体取决于域或整个服务器的独特性。我将所有这些变量放在另一个键中以防止污染命名空间。例如,Application.zos 和 Server.zos 是一切的地方。
标签: frameworks coldfusion railo cfml code-structure