文档章节

《对某XX系统的改进建议》- 一则关于系统重构的案例

林中漫步
 林中漫步
发布于 2015/10/26 21:33
字数 891
阅读 397
收藏 12

背景

    **2015年7月,**我临时被抽调到某项目组做架构师。去到那的第一天,该组负责人告诉我数据库已经设计好了,模块已经化分好了。 而在后续的几天,我看到的是:数据库还是采用已购的老会计系统的表结构,每个表都没有物理主键,每个表都是采用多个字段联合的业务主键,单这一点就让我傻眼了;模块虽然化分了,但各模块的职责并不明确; 批处理的线程设计不合理,大作业的处理链路过长;代码的分层分包没有统一规范。 此时,记账模块的核心代码已经写完了,批处理和会计接口的代码也写了大概1/4了。

    我那时很希望重新设计,从数据库的设计到基础框架的搭建,从分模块分层到通用组件的封装。但是我若一下来就把设计推倒重来,未免会伤到大家和气;再有,该负责人说之所以没有重新设计表结构,是因为时间不够。 ....其实,我觉得“时间不够”绝对不能成为不做设计、疏于设计的理由,因为那样的话,花费在编码和测试上的工期将会更多,且产品质量难以保证。

欲推其事,躬先表率

于是,我先尽量在不带给其它团队成员工作量的情况下,做了如下重构工作:

  1. 为每个表增加id列作为主键,而把原来的业务主键改为唯一约束。
  2. 由于项目的持久层框架采用的是myBatis,存在大量用mybatis-generator生成的dao,daoimp,mapper,该工具生成的代码繁锁啰嗦,我看了之后头痛,根本不好维护。于是我对dao接口进行了高度抽象,统一成12个标准的增、册、查、改方法,并按这些方法为每个表生成简洁的mapper.xml文件。于是,基于这个原因,我写了一款相当简洁的DAO层工具:mybatis-daoj

这样一来,dao层就不需要imp实现类了,各dao接口中也不需要声明方法(继承基类接口的12个CRUD方法就足够),大家只需要花半天时间改下调用dao的代码就可以,且主键的更换对程序员是透明的。 这样一来,与数据存取相关的代码就简洁、统一了。

    但这点改善,还远没达到我的要求。接下来我在口头上提出了一些建议,但由于是口头上的,所以大家要么没有充分理解、要么觉得动起来工作量太大,于是一再被搁置。

出于责任,给出书面建议

    本着一份责任心,我最终以书面形式提交了如下建议,该建议最终被项目组所接受。 我认为其对一般性的系统重构具有借鉴意义,所以今天分享出来,截图如下:
输入图片说明 输入图片说明 输入图片说明 输入图片说明 输入图片说明 输入图片说明 输入图片说明 输入图片说明输入图片说明

© 著作权归作者所有

林中漫步
粉丝 103
博文 55
码字总数 33266
作品 0
深圳
架构师
私信 提问
加载中

评论(8)

林中漫步
林中漫步 博主

引用来自“Tom-Lin”的评论

感谢分享。这么好的文章,这么没被 osc 推荐呢?osd 真是太失败了!
过奖啦:)
走起来
Very good!!!
Tom-Lin
Tom-Lin
感谢分享。这么好的文章,这么没被 osc 推荐呢?osd 真是太失败了!
林中漫步
林中漫步 博主

引用来自“Ambitor”的评论

你好,我想问下你的博客这些排版 样式怎么做的?还有目录 你哪个目录我没怎么看明白http://www.jianshu.com/p/67cc81003064,为什么我按这个写没反应啊,好像是乱排版? 这是我新写的博客,怎么调整哦。http://my.oschina.net/u/926166/blog/5239510
我打不开链拦,提示“由于作者设置了权限,你没法阅读此文,请与作者联系 ”。 你肯定没公开吧。
林中漫步
林中漫步 博主

引用来自“Ambitor”的评论

是要在简书上写了 再复制过来吗?- -!
直接在编辑栏书写的。 至于标题,你可以在你的标题前加“##”, 然后发表时在最下方选中“生成标题”。
林中漫步
林中漫步 博主

引用来自“Ambitor”的评论

是要在简书上写了 再复制过来吗?- -!
直接在编辑栏书写的。 至于标题,你可以在你的标题前加“\#\#”, 然后发表时在最下方选中“生成标题”。
Ambitor
Ambitor
是要在简书上写了 再复制过来吗?- -!
Ambitor
Ambitor
你好,我想问下你的博客这些排版 样式怎么做的?还有目录 你哪个目录我没怎么看明白http://www.jianshu.com/p/67cc81003064,为什么我按这个写没反应啊,好像是乱排版? 这是我新写的博客,怎么调整哦。http://my.oschina.net/u/926166/blog/5239510
重构之重与敏捷之轻---身份证号重构回顾

寻找重构的案例 重构的案例不好选取,我们自己实际的项目当然有不少重构的情况,却不适合作为文章阐述出来。并不是因为保密的考量,而是业务本身的内容太复杂。当然,这个复杂是相对的,对短短一...

予沁安
2013/01/25
2.3K
8
AgileEAS.NET平台开发实例-药店系统-快速的SAAS开发体验

一、AgileEAS.NET应用开发简介 在4月份,callhot写过一系列的有关于AgileEAS.NET平台的开发应用的系列AgileEAS.NET平台开发Step By Step系列-药店系统-索引,他通过一个接近于实际应用的案例...

橘子红了呐
2017/11/15
0
0
AgileEAS.NET 4.0重构裁剪,新的ORM、支持Linq,正式支持WPF,开放更多的接口

很久没有和大家交流了,今天出来给大家汇报一下AgileEAS.NET平台的最新进展: AgileEAS.NET是一套企业级的快速开发平台或者说是中间件,主要服务于中小软件企业,以提高软件企业的有效生产率...

agilelab
2011/05/05
0
0
读书笔记《重构 改善既有代码的设计》

重构 (refactoring) 在不改变代码的外在的行为的前提下 对代码进行修改最大限度的减少错误的几率 本质上, 就是代码写好之后 修改它的设计。 1,书中开始用一个例子简单阐释为什么要重构,以...

MichaelDuan
09/29
0
0
基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 4.0 最新发布版本 -下载使用说明

一、AgileEAS.NET发布包内容界面 在前些时间,我们对AgileEAS.NET平台平台进行了一次重构,进程序集进行了合并和裁剪,也发布一个基于新版AgileEAS.NET平台的SAAS结构的案例-AgileEAS.NET平台...

agilelab
2011/05/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

关于早起

早起是非常好的事情,但是像如果前一天睡得晚,或者第二天早上是非常冷的时候,那就不是很美好了。 但是本身早起是一件非常棒的事情,我记得我每次早起 如果不觉得困的话,世界是那么安静,脑...

T型人才追梦者
22分钟前
7
0
Java输入输出

JDK中的InputStream/OutputStream构成了IO输入输出继承层次的基础。它们都是面向字节序列的,每次可以从序列中读入或者写出一个字节或者指定大小的字节数组。但是面向字节流的输入输出不便于...

ytuan996
39分钟前
4
0
Xamarin图表开发基础教程(9)OxyPlot框架

Xamarin图表开发基础教程(9)OxyPlot框架 OxyPlot组件构成 OxyPlot组件主要由两个类构成,分别为PlotView和PlotModel。这两个类我们在上文中也使用到了。本节将讲解介绍这两个类。 1.图表视...

大学霸
44分钟前
5
0
协议栈

一、关键技术点分析 不同服务在性能上适用不同协议进行传输,如对接异构第三方服务时,通常选择HTTP/Restful等公有协议;而对于内部不同模块之间的服务调用,一般选择性能较高的二进制私有协...

edwardGe
52分钟前
7
0
新建时隐藏按钮,显示明细时显示

在InitControl()中 if (saTableKeys != null) { rpgDesign.Visible = true; rpgPrint.Visible = true; }......

_Somuns
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部