2015-06-15 2 views
0

Я застрял в реализации некоторых условных правил в форме в бэкэнд. В основном мне нужно придумать эффективный и масштабируемый способ сделать это. Я искал двоичные деревья и деревья решений для этого, но все еще не уверен, что лучший способ реализовать это.Комплексный дизайн условного фильтра

enter image description here

Как вы можете видеть, что есть один оператор с возможностью более чем одного условия, разделенных логическое И/ИЛИ. В принципе, мне нужно знать структуру данных для хранения этой информации в базе данных. Он будет действовать как фильтр, когда форма будет отправлена ​​пользователем на основе значений формы, когда она пройдет через фильтр. В результате произойдет какое-то действие.

ответ

0

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

interface ConditionTree { 
    boolean evaluate(...); 
} 

class OperatorNode implements ConditionTree { 
    List<ConditionTree> subTrees = ....; 

    @Override 
    boolean evaluate(...) { 
     if(operator == AND) { 
     //loop through and evaluate each sub tree and make sure they are all true, 
     //or return false 
     } 
     else if(operator == OR) { 
     //loop through and evaluate each sub tree, and make sure at least one is 
     //true, or return false 
     } 
    } 
} 

class LeafNode implements ConditionTree { 
    @Override 
    boolean evaluate(...) { 
     //get the LHS, operator, and RHS, and evaluate them 
    } 

} 

Обратите внимание, что это N-арной дерево, не бинарное дерево.

+0

спасибо за решение. Это имеет смысл, но мне было интересно, как вы храните это в базе данных. Предполагается, что весь этот объект фильтра будет храниться в базе данных, и после отправки формы мы передадим представленные данные через фильтр. –