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() ;
拆分 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, 不能知道