自关系, 是数据结构;;闭环的DD关系玩玩是数据结构的突破点;
实体间关系是 业务世界的设计重点;
2. 如果一个实体是 复合主键怎么办,一开始是想 得到两个 Long-field1_Long-filed2 ,但是如何知道哪个是哪列
最后想到了 "xx"=properties and "xx"=properties ,形成最终的 String;
但又想, 变成这个String 感觉不太灵活, 突然灵光一现, 可以用一个类(结构体)来表示;
Key{
String filedName
Long filedValue
}
接口是
getKeys{
List<Key> ;
}
突然领悟: 结构体的作用就是传递信息, 数据+操作; 当你无法完全表达信息时就需要用更复杂的结构体来表征;; 单纯的Long ,String不够用时就需要复合结构体;
如果是两层,那么就有level1 的properties =value的操作, level2每个层级间的与或非操作;;
对于level2的数据结构描述是: 每个表达式可以组合,然后变成又一个表达式,无限层次;;这种不就是自引用么;
Node{
data;
operator ;
Node opNode;
}
没有表示出业务含义;;Node{
Node leftNode
operator
Node rightNode
}
hibernate
private final String op;
利用DD方法设计数据结构:
实体是 表达式 ,操作符;
关系是 表达式里有自己;表达式里有操作符; 自关系是难点, 是数据结构的重点 ;;闭环的DD关系玩玩是数据结构的突破点
这才表示出了node和node的结合又是node, 首先得到了实体,然后得到了实体间关系, DD方法设计数据结构, 自循环
如何把这两层统一起来呢??? 他们共同的行为就是变成一个sql字符串;
所以很自然想到了toSqlString行为,Criterion接口,,, 这个面相过程就没办法体现出来;;
如果从面向过程的角度,那就是看传入的是Node 还是leaf , 进行两种行为判断;------攀攀的折中方案是把叶子和node的逻辑混合在一起了; 对外只提供一种类,内部通过operator操作符 and or 还是 equal把这两种区分出来;;不是那么完美的设计方案;;
很自然想到了数,并且区分叶子和节点;;
本来攀攀想两个叶子和节点变成两个类, 不好体外提供接口;;就需要两个方法;;
其实不然,可以变成一个接口的形式;;把不同的类统一起来;;;; 性质,行为相同就好了;;
是一个和有一个的不同;
这个需要心理要了解各种数据结构,以及 过程调用方案( 自己写的处理方案, 递归 ) + 面向对象的 编程技巧方案( hibernate 的 restriction 的接口多态方案 ,这个完全属于编程技巧, 更漂亮的代码 ,无 if else );
}
面向对象是 对象.xx ;代码优化,并且方便的使用Restrictions等工具类;
面向过程是将对象(数据结构)传进去;