Какой шаблон проектирования подходит для обработки многих условных ветвлений - PullRequest
1 голос
/ 22 марта 2019

У меня есть несколько строк в таблице, которые хранят некоторые переменные и связанные значения. Я должен запустить задачу в зависимости от значений переменных из разных строк. Несколько значений из нескольких строк могут перекрываться условиями И / ИЛИ. Какой шаблон проектирования будет полезен для уменьшения цикломатической сложности в этой ситуации?

Допустим, таблица

table

Теперь во время выполнения необходимо проверить некоторые условия. Например,

если столбец v1 имеет какое-либо значение 'a' или 'b' И 3-я и 4-я строка содержат любое 'g' ИЛИ ​​вся 5-я строка содержит значение 'f' и т. Д.

Требования такого рода являются динамическими при определенных фиксированных границах, и я должен подготовить метод, который принимает входную таблицу и условия. Наконец, метод возвращает истину / ложь. Если я реализую наивно, мне нужно много вложенных if / else при полностью ограниченных возможных условиях, что делает мой код очень сложным. Что будет хорошим шаблоном, чтобы справиться с этим.

1 Ответ

4 голосов
/ 22 марта 2019

Для сценария реального мира, я думаю, вы должны изучить механизмы правил, см. https://www.baeldung.com/java-rule-engines для списка примеров.

Суть в следующем: представление ваших правил в рукописном коде не масштабируется!Нет хороших шаблонов, которые бы препятствовали превращению такой базы кода в код спагетти с течением времени.В реальном мире такие правила часто меняются, и поддержание вашего кода в актуальном состоянии часто приводит к тому, что система воздуховодов прикрепляет к нему еще одно условие.

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

И дело в том, что если вы серьезно относитесь к качеству своей работы, вы все равно, скорее всего, самостоятельно внедрите свой собственный маленький механизм правил.Так почему бы не выбрать один с полки или, по крайней мере, тщательно изучить его и использовать в качестве вдохновения, как лучше решить вашу проблему ?!

...