如何将全局常量重构为模块-JS最佳实践

时间:2019-02-17 02:43:20

标签: javascript jasmine global-variables refactoring constants

我是JS的新手,到目前为止,我的阅读表明全局变量是一个巨大的危险信号,应不惜一切代价避免使用。我目前正在处理重构难题,并且在.js文件中声明了一些数值,随后在程序中的其他.js文件中对其进行了调用。我不确定在这里使用的最佳做法,因此可以消除任何代码异味。

我有一些常量存储在文件options.js中。然后,将这些常量用于其他几个文件中,例如agedbrie.jsquality.js

所有这些文件都存储在一个文件夹中。

就目前为止采取的步骤而言,我已经考虑过简单地在每个需要它们的函数中声明所需的变量,因此(我认为)将它们从全局空间中删除。但是,这导致大量重复,并导致代码不遵循DRY原则。

Options.js:

 const MIN_SALE_DATE = 0
 const MAX_QUALITY = 50
 const MIN_QUALITY = 0
 const SULFURAS_QUALITY = 80

在程序中的其他文件中调用这些常量的位置的示例:

Agedbrie.js

(function(exports){

//other code unrelated
}

AgedBrie.prototype.updateQuality = function () {
    if (this.sellIn > MIN_SALE_DATE ){

quality.js:

    //other code 

function qualityMaximum(quality){
    if (quality > MAX_QUALITY) {
        quality = MAX_QUALITY
    }
    return quality
}
    //further code

从本质上讲,我有现在可以运行并通过我编写的测试的代码,但是我渴望尽早采用最佳实践,因此消除任何可能的全局变量非常重要。预先谢谢你!

编辑

请澄清-这是对Gilded Rose Kata

的尝试

我有一个可行的解决方案,目前仅包含全局变量,就最佳实践而言,我知道这有点危险。

编辑2

我自己设法纠正了这一问题-如果有人通过Google来到这里,这就是我所做的:

options.js

var OPTIONS = (function() {

  var private = {
    "MIN_SALE_DATE" : 0,
    "MAX_QUALITY" : 50,
    "MIN_QUALITY" : 0,
    "SULFURAS_QUALITY" : 80
    };

  return {
    get: function(name) { return private[name]; }
  };

})();

然后为了在我的代码的其他地方调用这些变量:

OPTIONS.get("name here")

0 个答案:

没有答案