Как преобразовать глобальные константы в модуль - лучшие практики JS - PullRequest
0 голосов
/ 17 февраля 2019

Я новичок в JS - мое чтение до сих пор предполагает, что глобальные переменные - это огромный красный флаг, и его следует избегать любой ценой.В настоящее время я работаю над проблемой рефакторинга, и у меня есть некоторые числовые значения, объявленные в файле .js, которые впоследствии вызываются в других файлах .js в программе.Я не уверен в лучших методах использования здесь и, следовательно, для устранения любых запахов кода.

У меня есть некоторые константы, хранящиеся в файле, options.js.Эти константы затем используются в нескольких других файлах, таких как agedbrie.js и quality.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

По сути, у меня есть код, который работает прямо сейчас и проходит тесты у меня естьнаписано, однако я стремлюсь забирать лучшие практики рано, поэтому устранение любых возможных глобальных переменных довольно важно.Заранее спасибо!

РЕДАКТИРОВАТЬ

Просто чтобы уточнить - Это попытка позолоченного ката

Iу меня есть рабочее решение, только оно содержит глобальные переменные, которые, как я знаю, являются чем-то вроде красного флага, когда дело доходит до лучших практик.

РЕДАКТИРОВАТЬ 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...