最近完成的模块是项目概算表模块跟基本信息表模块。数据库
另外花了时间考察了下excel在线编辑跟文件上传组件。设计
记录下关于项目基本表里解决的一个小问题日志
项目表只设计了一张基本信息表 project,基础字段的查询,列表展现,都用的此表。之前用也没什么问题,可是到填项目基本信息表时,出现了一个问题是,操做同一张表,AOP如何拦截记录审批日志?设计的审批日志拦截系统是读取Controller方法里第一个参数,判断类型,而后存到数据库中。按照以前设计,操做的都是同一张表。那么记录的只能是同一个类。这样审批日志就没法区分,到底是总体项目的流程,仍是基本信息表的流程。excel
解决思路1,第一是把项目基本信息单独放一张表,而后跟主表关联,主表负责总体。基本信息表负责基本信息表,接下来的问题是,主表用那些字段,子表用哪些字段,若是主表不包含基础信息,那么主表在列表展现跟查询上会麻烦,并且已经写好的要重构。若是主表包含基础信息,那么子表跟主表的信息重复,就要考虑传值与拷贝,也是增长了麻烦程度。对象
解决思路2,既然没法区分,那么基本信息表用一个子类来代替,这样不改变持久化的数据,只改变参数就好了。感受这种思路可行,就接着写下去,写了个ProjectBasic继承了Project,可是没有本身的属性。替换Controller里的方法,写的时候又有问题了,数据对象若是绑定的是子类,那么存储成父类只要强转就好了,可是Service中取出来的是父类,不能强制转换成子类。如何解决?继承
绕了一些弯路之后,发现解决办法也不难,就是把Controller里的方法分红两类,一种是涉及到Project信息持久化的,还保留原来的查询与存储方法,前台的对象也绑定到Project上,另一种是设计到流程的,须要进行AOP拦截的,前台对象绑定到子类上,这样提交业务流程的时候,只要把子类强制转换成父类就能够保存了。文件上传
总结一下,解决问题的办法有许多种,多花时间梳理思路,优先选择改形成本最低的,代码变更最少的。基础