gpt4 book ai didi

coldfusion - 我应该将实用程序单例组件放在什么范围内?

转载 作者:行者123 更新时间:2023-12-04 00:49:31 25 4
gpt4 key购买 nike

我们刚刚升级到 CF10,我正在完成一个“缺失”实用函数库(主要与迭代相关,例如 mapreduce) 。这些功能应该始终在应用程序的每个页面和每个组件中可用。它们是无状态组件的方法,基本上充当模块或命名空间。

我通过将组件称为 _ 来继承下划线及其同类。因此,用法类似于 _.map(myArray, myCallback);。我的问题是我应该将 _ 变量放在哪里。我可以用 variables._ = new Shared.Components.Util.FunctionalUtil(); 开始每个页面,但这很烦人,我们最终会得到很多无用的副本。我希望它在全局范围内声明,并且每个请求初始化不超过一次。

ColdFusion 的“全局”范围是:CGI、URL、表单、Cookie、客户端。这些是用于名称解析的范围,它们在请求中共享它们的值。其中,CGI、URL 和 Form 作用域存在冲突风险,而 Cookie 作用域实际上将数据存储在客户端上;这留下了客户端。但是,组件不能存储在客户端范围内。事实上,似乎唯一有效的是 URL 和 Form,而 Form 并不总是存在。

现在,将实用程序组件填充到 URL 中似乎是一件值得怀疑的事情。有更明智的选择吗?

最佳答案

最干净的方法是在应用程序启动时初始化静态组件一次,并声明一个别名(简写)以在页面上下文中使用。

// Application.cfc

public boolean function onApplicationStart() {

APPLICATION.FU = new Shared.Components.Util.FunctionalUtil();

return true;
}

public boolean function onRequest(required string targetPage) {

VARIABLES._ = APPLICATION.FU;

include ARGUMENTS.targetPage;
return true;
}

您现在可以使用 _.someFunction(); 访问静态组件。在页面上下文之外(例如在另一个组件中),使用 APPLICATION.FU.someFunction(); .

关于coldfusion - 我应该将实用程序单例组件放在什么范围内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32727576/

25 4 0