多种层级多种operation 处理查询;; ---树
另外一种方案是: 直接变成树, 攀攀的Node查询法,多层级,多operation ;
public class OperationNode {
private OperatorEnum operator;
// 当operator为AND/OR时,需要设置leftChild和rightChild值
private OperationNode leftChild;
private OperationNode rightChild;
// 当operator为EQUAL/NOT_EQUAL时,需要设置protertyName和value值
private String propertyName;
private String value;
}
对 node 树处理时 根据 operation区分 是 节点 还是叶子
或者利用面向对象的特性, 把树的递归变成自然的方法调用;;
LogicalExpression 和 simpleExpression ;
面向对象+接口多态 实现方法调用的递归, 实现不同类的递归, 但是相同接口的递归;;
}
攀少的处理( 把 node 节点和leaf 都用一个类表示 , 处理的时候用operation把两者区分开来,,这种写法不太美观, 原因之一是 节点和leaf是两种不同的业务含义, 一种是直接 属性+Node , 一种是 表达式 operation 表达式 , 现在只有两种操作还简单,当变成 in like = notEqual ,between( hibernate中是 LikeExpression ,InExpression )等等操作时, 简单的使用 if else就会把代码复杂化,这时候就可以想到利用多态, 而且是接口多态;
很好的面向对象编程技巧方案,自动化处理的基本方案,思路;
这是我以前没有想得到的
if(operation= xxx){
}if (operation= xxx){
) ;
重构if case的方法就是增加类,实现多态; 现在应该是实现接口实现多态;;
面向对象是 对象.xx ;代码优化,并且方便的使用Restrictions等工具类;
面向过程是将对象(数据结构)传进去;