我是ColdFusion开发人员,但我认为我的问题将适用于许多不同的语言。
我目前在模型结构中有控件,服务和DAO层。
我有一个名为DSN(数据源)的特定环境变量,在我的应用程序中使用了很多。 (将来可能会有更多这些变量。)
我首先将此值存储在应用程序范围中。但是,我们的应用程序功能自一开始就发生了变化,DSN现在可以在用户登录时更改。
此外,我计划为我的系统构建测试工具,这将允许在不同的情况下测试我的系统,此变量会发生变化。
因此变量变得可变。
一个选项是在我的DAO对象的实例化上设置变量。 但我也实现了Wirebox依赖管理,出于性能原因,我希望尽可能多的模型是单例,所以这不是一个选项。
我的最终解决方案(需要大量重新分解)是从所有层传递DSN - 因此可以在任何方法调用上覆盖默认DSN值(每个方法都有一个DSN参数,默认为应用程序值。)
显然我想避免这项额外的工作,但我想不出任何其他办法。希望解释十分清楚,任何帮助都将受到高度赞赏。