Охранник из пропавших без вести и недопустимые параметры функции


Есть ли более подходящий способ, чтобы охранять все входы против отсутствующих и поврежденных парам(ы)? Длинный список if заявление в верхней, кажется, так трудно читать.

 deliveryForCategory(code, category, dateStart, dateEnd) {
    if (!code) {
      throw Error(ERROR_MISSING_CODE);
    }

    if (!category) {
      throw Error(ERROR_MISSING_CATEGORY);
    }

    if (!DELIVERY_CATEGORIES.has(category)) {
      throw Error(ERROR_INVALID_CATEGORY);
    }

    if (!dateStart || !dateEnd) {
      throw Error(ERROR_MISSING_DATETIME);
    }

    return get(
      `${URL_APP_BASE}/accounts/${code}/delivery/${category}/${dateStart}/${dateEnd}`
    );
  }


111
1
задан 6 февраля 2018 в 06:02 Источник Поделиться
Комментарии
2 ответа

То, что вы сделали, это вообще подход я принять; однако, если эти охранники использовали много во всем приложении, возможно, вы могли бы преобразовать их в отдельные функции:

deliveryForCategory(code, category, dateStart, dateEnd) {
VerifyCode(code);
VerifyCatergory(category);
VerifyDate(dateStart);
}

Потенциально это имя что-то вроде ThrowErrorIfCodeInvalid(code) Так что это очень ясно, что он делает.

2
ответ дан 6 февраля 2018 в 08:02 Источник Поделиться

Есть несколько способов, я мог думать:

validateRequired(value, error_code) {
if (!value)
throw Error(error_code);
}

validateCategory(category) {
if (!DELIVERY_CATEGORIES.has(category)) {
throw Error(ERROR_INVALID_CATEGORY);
}
}

deliveryForCategory(code, category, dateStart, dateEnd) {
validateRequired(code, ERROR_MISSING_CODE);
validateRequired(category, ERROR_MISSING_CATEGORY);
validateCategory(category);
validateRequired(dateStart, ERROR_MISSING_DATETIME);
validateRequird(dateEnd, ERROR_MISSING_DATETIME);
...

или

validateRequiredArgs(args, codes) {
codes.forEach( function(code, index) {
if (!args[index])
throw Error(code);
});
}

deliveryForCategory(code, category, dateStart, dateEnd) {
validateArgs(arguments,
[ ERROR_MISSING_CODE,
ERROR_MISSING_CATEGORY,
ERROR_MISSING_DATETIME,
ERROR_MISSING_DATETIME ] );
...

1
ответ дан 6 февраля 2018 в 04:02 Источник Поделиться