总结: 设计实体 和 ormapping 的思路

来源:互联网 发布:js 9mm冲锋枪 编辑:程序博客网 时间:2024/05/28 05:14

1. 抽象实体

2. 抽象关系, 关系必须要含有返回对象 , 注意区分是否是自关系

3. 重新整理返回对象, 可以考虑把List<实体> 变成 Map<实体 > ,可以考虑LIst<新实体> 变成 List<自实体>

3.0 搞两个返回结果一样,但函数名不一样的关系是最不敢想的

LayoutIndex  material setCurrentMaterial()   List<Material> setHistoryMaterials() 

3.1 

3.1.把List<业务实体> 整个抽象为 设计实体来考虑; 

3.1.1 设计实体的 immutable 可以随便定义

3.2 查看是否引入非 外部实体外键属性.例如:  自实体还需要考虑,由于新增了一列非上游实体属性 (比如 ad material, material 的getHIstoryMaterial在自实体上增加了一个属性, 就影响到了上游和此实体的关系含义)<>

3.3 material List<material> getHIstoryMaterials  List<historyMaterial> getHIstoryMaterials 

是否应该将原有实体拆成两个实体 ; 物料编辑本来是没有历史,现在有历史,有历史的部分其实是 内容, 编辑者 ,位置;

3.4 一个物料单元,有三个位置, 一个位置有一个now物料 ;现在将 位置变成基本实体组合到物料上 叫做物料; 其实是 物料位置;; 

现在呢,一个位置上要有多个历史物料;;  但问题在于 实体已经将位置和物料死板的绑定了,一个位置一个物料;;

<layoutindex,material > getMaterials() ;

现在又要增加一个历史

Map <Date ,Map <layoutIndex, material>>  getHistoryMaterials() ;

有Map的, 1侧就不允许有Set方法,不然就不可能1对1了;

设计关系 get都无所谓,但是如果是set,就很容易违背了当初设定实体关系的含义;;

4. 拆分实体原则: 

Ad

Map <layoutindex,material > getMaterials() ;

Map <Date ,Map <layoutIndex,materials>>  getHistoryMaterials() ;

出现这么复杂的关系的时候,就需要考虑是否有必要拆分实体了 ;

Date 是时间, 不好拆分含义,顶多是历史物料;;

把 layoutIndex 拆分出来;; 

Map <Date ,Map <layoutIndex, materials>>  getHistoryMaterials() ;

变成 Map <layoutIndex ,Map <Date, materials>>  getHistoryMaterials() ;

拆分 LayoutIndex 

这样

ad   LayoutIndex  <LayoutIndex  ,LayoutIndex> get

LayoutIndex  material setCurrentMaterial()   List<Material> setHistoryMaterials() 或者  Map<Date ,Material >  getHistoryMaterials()

Map <layoutIndex ,Map <Date, materials>> 变成 Map<Date ,Material > 



4 .  设计ormapping , List<实体 > get实体 ,可以新增关系类, 可以在原有实体上关联 ,可以用@where ,可以变成Map<xxx ,List<实体> >




误区,跨实体考虑关系,设计ormapping :

Ad实体下的历史关系Map<Date,Material> getHistoryDeniedReasons(){ } //这个设计是错的,因为你报错的是Ad下的所有物料解决历史;但不是一个物料ID

就必须只能通过关系表来实现ormapping;如果不通过关系表,而是把date映射到Material实体中,那么一个material只能有一个历史Date ;

这个关系无法表达物料的历史,原因, 这个关系上只能获取某个时间下的某个物料信息;  只能查看到多个时间下的多个物料;; 并不是一个物料的历史;;

 只能知道某个时刻的物料id, 不能知道

原创粉丝点击