记一次解决小bug的思路

最近完成的模块是项目概算表模块跟基本信息表模块。

另外花了时间考察了下excel在线编辑跟文件上传组件。

记录下关于项目基本表里解决的一个小问题

项目表只设计了一张基本信息表 project,基础字段的查询,列表展示,都用的此表。以前用也没什么问题,但是到填项目基本信息表时,出现了一个问题是,操作同一张表,AOP如何拦截记录审批日志?设计的审批日志拦截系统是读取Controller方法里第一个参数,判断类型,然后存到数据库中。按照之前设计,操作的都是同一张表。那么记录的只能是同一个类。这样审批日志就无法区分,究竟是整体项目的流程,还是基本信息表的流程。

解决思路1,第一是把项目基本信息单独放一张表,然后跟主表关联,主表负责整体。基本信息表负责基本信息表,接下来的问题是,主表用那些字段,子表用哪些字段,如果主表不包含基础信息,那么主表在列表展示跟查询上会麻烦,而且已经写好的要重构。如果主表包含基础信息,那么子表跟主表的信息重复,就要考虑传值与拷贝,也是增加了麻烦程度。

解决思路2,既然无法区分,那么基本信息表用一个子类来代替,这样不改变持久化的数据,只改变参数就行了。感觉这种思路可行,就接着写下去,写了个ProjectBasic继承了Project,但是没有自己的属性。替换Controller里的方法,写的时候又有问题了,数据对象如果绑定的是子类,那么存储成父类只要强转就行了,但是Service中取出来的是父类,不能强制转换成子类。如何解决?

绕了一些弯路以后,发现解决办法也不难,就是把Controller里的方法分成两类,一种是涉及到Project信息持久化的,还保留原来的查询与存储方法,前台的对象也绑定到Project上,另外一种是设计到流程的,需要进行AOP拦截的,前台对象绑定到子类上,这样提交业务流程的时候,只要把子类强制转换成父类就可以保存了。

总结一下,解决问题的办法有许多种,多花时间梳理思路,优先选择改造成本最低的,代码变动最少的。

猜你喜欢

转载自my.oschina.net/u/2351812/blog/1789514