Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop Singleton中的环境变量-ColdFusion平台_Oop_Variables_Object_Coldfusion - Fatal编程技术网

Oop Singleton中的环境变量-ColdFusion平台

Oop Singleton中的环境变量-ColdFusion平台,oop,variables,object,coldfusion,Oop,Variables,Object,Coldfusion,我是一名ColdFusion开发人员,但我认为我的问题将适用于许多不同的语言 目前,我的模型结构中有控制层、服务层和DAO层 我有一个称为DSN(数据源)的特定环境变量,在我的应用程序中经常使用它。(这些变量将来可能会更多。) 我首先将该值存储在应用程序范围中。然而,我们的应用程序功能从一开始就发生了变化,DSN现在可以在用户登录期间发生变化 此外,我计划为我的系统构建测试工具,这将允许在该变量发生变化的不同场景下测试我的系统 所以这个变量变了 一个选项是在我的DAO对象的实例化上设置变量。 但

我是一名ColdFusion开发人员,但我认为我的问题将适用于许多不同的语言

目前,我的模型结构中有控制层、服务层和DAO层

我有一个称为DSN(数据源)的特定环境变量,在我的应用程序中经常使用它。(这些变量将来可能会更多。)

我首先将该值存储在应用程序范围中。然而,我们的应用程序功能从一开始就发生了变化,DSN现在可以在用户登录期间发生变化

此外,我计划为我的系统构建测试工具,这将允许在该变量发生变化的不同场景下测试我的系统

所以这个变量变了

一个选项是在我的DAO对象的实例化上设置变量。 但我也实现了Wirebox依赖关系管理,出于性能原因,我希望尽可能多的模型是单例的,所以这不是一个选项

我的最终解决方案(需要大量重新分解)是从所有层传递DSN,以便在任何方法调用上都可以覆盖默认DSN值(每个方法都有一个默认为应用程序值的DSN参数)


显然,我想避免这项额外的工作,但我想不出任何其他方法来解决它。希望您的解释足够清楚,如有任何帮助,我们将不胜感激。

当用户登录时,dsn是否会发生变化?如果该用户的会话范围保持不变,但不一定是下一个用户,则会话范围可能是合适的。对于类似类型的配置,我通常有一个
config
对象,该对象将传递给所有需要它的服务。这满足了“单例”要求。当DSN发生更改时,您可以将DSN名称放入会话范围,然后使用任何方法获取DSN,您可以检查会话范围中是否存在值。如果是,请使用该选项,如果不是,请使用“默认值”。
DSN现在可以在用户登录期间更改
您的意思是它可以在用户登录时更改,还是在用户会话期间更改。如果只是在用户登录时,我会同意@DanBracuk,因为这是会话范围的目的,存储特定于用户的数据。