Итак, многие заканчивают тем, что стараются избегать использования выражений if, потому что считают, что «должен быть более простой и более чистый способ сделать это». Как бы то ни было, по сути, код - это просто набор операторов if на базовом уровне c.
Так что я бы не слишком беспокоился об их использовании, потому что, пытаясь использовать HashMaps или что-то еще, вы можете просто использовать ядерную бомбу, чтобы убить комара.
Следует иметь в виду, что вам не нужны вложенные операторы if / else, это становится трудно проверить.
Например, вы упоминаете, что должны это сделать. проверять переменные несколько раз. Так что не так с проверкой, что они не пусты в начале потока. Если они есть, выйдите или вернитесь с соответствующим результатом. Тогда вам больше не нужно делать проверки.
Кроме того, полезно использовать короткие функции, описывающие то, что вы пытаетесь сделать.
Вместо:
else if (String.Utils.isNotEmpty(payload.getKeyChange2TokenNumber())
&& String.Utils.isEmpty(payload.getKeyChange1TokenNumber())
&& String.Utils.isEmpty(payload.getKeyChange3TokenNumber()) {
String.format(return value dependant on outcome of validation)
}
Попробуйте:
if (notEmpty(payload.getKeyChange2TokenNumber())
&& notEmpty(payload.getKeyChange1TokenNumber())
&& notEmpty(payload.getKeyChange3TokenNumber())) {
String.format(return value dependant on outcome of validation)
}
private boolean notEmpty(String string) {
return StringUtils.isNotEmpty(string);
}
Кроме того, если вышеупомянутая проверка действительно связана с ответом, связанным с доменом, используйте ее вместо этого. Например, предположим, что getKeyChange1TokenNumber
, getKeyChange2TokenNumber
, getKeyChange3TokenNumber
все проверены, чтобы определить, предоставлены ли номера токенов обязательного изменения ключа, и вы не сможете продолжить, если это не так. Ваш код будет выглядеть так:
public void main() {
if (mandatoryKeyChangeTokensNotProvided(payload)) {
return "Mandatory Key Change Tokens not provided";
}
...
}
private boolean mandatoryKeyChangeTokensNotProvided(Payload payload) {
return isEmpty(payload.getKeyChange2TokenNumber())
&& isEmpty(payload.getKeyChange1TokenNumber())
&& isEmpty(payload.getKeyChange3TokenNumber());
}
private boolean isEmpty(String string) {
return StringUtils.isEmpty(string);
}
Попробуйте использовать язык домена в своем коде, чтобы он был более понятным для разработчика. Поэтому разработчик, читающий это, прочитает метод mandatoryKeyChangeTokensProvided
и узнает, что он делает. Если они хотят знать, как он это делает, просто войдите в метод go и увидите, что выполнение пустой строки проверяет его. Надеюсь, это поможет вам.
Есть несколько способов сделать это, но все зависит от вашего домена. Например, вы говорите, что это проверка? Что плохого в том, что у вас есть класс Validator, который выполняет все эти проверки для вас? Но помните принцип KISS. Старайтесь не усложнять вещи.