Я пытаюсь придумать лучший способ форматирования кода сложного дерева решений, используя javascript обещания.
Я прочитал следующие вопросы, но не смогнайти то, что я ищу:
Мои желания:
- Поток должен быть очень простым для понимания новыми разработчиками, которые войдут в проект в будущем.
- Каждое действие / шаг будет обрабатываться в изолированной функции / обещаниии может быть легко заменено без необходимости повторного тестирования других шагов.
- Ввод должен передаваться от каждого обещания к следующему.
Простое дерево решений, например:
Я думал о следующих методах:
Метод 1
var path = "";
var input = {hhh:111};
step_1(input)
.then(step_2)
.then(change_path_to_A_or_B_according_to_input)
.then(step_a1)
.then(step_a2)
.then(change_path_to_X_or_Z_according_to_input)
.then(step_x1)
.then(step_x2)
.then(step_z1)
.then(step_b1)
.then(step_b2)
.then(step_b3);
В этом методе каждый шаг или соединение сначала проверяют переменную пути, а затем решают, должен ли он выполняться или нет.Изменить путь относительно сложно, потому что содержание шагов должно меняться в зависимости от их расположения в дереве решений (т. Е. Необходимо скорректировать проверку переменной пути).Тем не менее, достаточно просто понять дерево решений, посмотрев на него, хотя отступы выполняются вручную и на самом деле не имеют никакого эффекта.
Метод 2
var input = {hhh:111};
step_1(input)
.then(step_2)
.then((input) => {
if(condition) {
return
step_a1(input)
.then(step_a2)
.then((input) => {
if(condition) {
return
step_x1(input)
.then(step_x2);
} else {
return
step_z1(input);
}
});
} else {
return
step_b1(input)
.then(step_b2)
.then(step_b3);
}
});
В этом методеизменить путь относительно легко, потому что нужно настроить только само дерево.Тем не менее, он менее читабелен.
Есть лучшие предложения?