在 Coldfusion 中使用变量作用域定义常量是一个好习惯吗?

问题描述

在我们的 Adob​​e Coldfusion 项目中,我们将一些组件用作单例,例如:

component name="Util" {
    public function init() {
        variables.settings = loadFromConig();
        variables.prefix = "my_";
        return this;
    }

    public string function getPrefix() {
        return variables.prefix;
    }

    public struct function getSettings() {
        return variables.settings;
    }
}

这应该正常工作,因为必须始终首先执行 init() 函数,以便能够调用任何其他方法。 我担心的是:如果 loadFromConig() 函数花费的时间太长并且某些 getter 方法抛出未定义的变量异常,是否有没有按预期发生的风险(例如在压力测试条件下)?

一般来说,在构造函数方法 A)中使用变量范围定义一些“常量”是一个好习惯,还是使用属性更好改为使用认值(方法 B),或者直接在 getter 中硬编码“常量”是否更安全:

public string function getPrefix() {
   return "my_";
}

方法 C)?

我使用方法 A - 在这些行周围放置一个 cflock 是否是个好主意:

  variables.settings = loadFromConig();
  variables.prefix = "my_";

在构造函数中或者这样的锁会无用吗?

解决方法

在重新思考这个问题之后,我得出的结论是,最好将 final 变量用作常量,因为一旦初始化 final 变量就无法更改它的值。

component{
    final prefix = "my_";         
    function checkPrefix(){
        writeoutput("prefix: " & prefix);
    }
}