Каковы хорошие способы обработки сложной бизнес-логики, которая с первого взгляда требует множества вложенных операторов if?Как упростить сложную бизнес-логику «ЕСЛИ»?
Пример:
Дисконтный купон. может быть:
1a) Значение скидки
1b) Процент скидки
2а) Нормальная скидка
2b) Прогрессивная скидка
3a) Требуется купон
3b доступа) Не требуется купон
4a) Применяется только для клиентов, которые уже купили до
4b) Применимо к любому клиенту
5а) Применительно к заказчику только из стран (X, Y, ...)
Это требует код еще сложнее, то это:
if (discount.isPercentage) {
if (discount.isNormal) {
if (discount.requiresAccessCoupon) {
} else {
}
} else if (discount.isProgressive) {
if (discount.requiresAccessCoupon) {
} else {
}
}
} else if (discount.isValue) {
if (discount.isNormal) {
if (discount.requiresAccessCoupon) {
} else {
}
} else if (discount.isProgressive) {
if (discount.requiresAccessCoupon) {
} else {
}
}
} else if (discount.isXXX) {
if (discount.isNormal) {
} else if (discount.isProgressive) {
}
}
Даже если заменить МСФ для переключения/случай это все еще слишком сложный. Каковы способы сделать его читабельным, ремонтопригодным, более проверяемым и понятным?
Это не разные классы скидок. Это один класс скидок со всеми этими 1-5 вещами, как возможными свойствами. – Zelid
Я предлагаю вам изменить это, чтобы у вас было несколько классов скидок. –
Хорошо, как тогда указать, что скидка должна быть 1a, 2b, 3a, 4b одновременно? – Zelid