文档章节

程序进化论之素材

AlbertBoy
 AlbertBoy
发布于 2015/11/03 13:54
字数 1086
阅读 8
收藏 0
 工作有几年了,主要干的是系统维护工作,维护一个庞大而臃肿的erp系统,说它庞大,是因为这个erp系统已经在前前后后快12年的时间里经过了无数次的改造,增添了各种奇思妙想,早已面目全非,说它臃肿,是因为这些奇思妙想是各种重复的功能的叠加。然而从软件工程的角度来讲,我们并没有做的很好,没有很好的梳理和管理代码,导致系统功能和系统代码一起变得臃肿,速度自然也像老牛拉破车了。细说其实还是存在很多客观因素的,但这并不妨碍程序进化论的探讨,程序进化论就是在这些客观因素存在的情况下,探讨如何进行程序的进化的。

 代码重复,代码复用,这个一直困扰我的问题时至今日也未能很好的解决,但我却有了点想法。事情是这样,我们有一串流程类的业务,它们之间的关系是前后锁定的,就是下步操作了,上一步将无法执行,其实这种流程很常见。但是我遇到了一个棘手的问题,这些前后的锁定代码逻辑,是写在各自的业务后台程序里的,即使它们之间的代码是完全一样,这导致了一个严重的后果,牵一发动全身,不仅如此,要知道这种所谓的锁定是存在各种各样的小后门的,就像这个社会一样,仅有知道的人才知道。因此我常在修正这些锁定的逻辑后,数周或者数月,修正前的问题突然又冒出来了,就像我什么都没干一样,这是令人极其沮丧的。追查后才发现是有个不为众人所知的小后门导致的,于是开始搜寻是否存在同样类似的小后门,要知道海底捞针是极其痛苦的事情。

 其实并不是否定这些小后门不应该,而是我们的程序并没有适应这种变化,我们的程序本身就是为了服务于各种繁杂业务而存在的,但当业务变更时(这很常见),可以理解为环境变化时,我们的程序并没有适应这种变化,这当然适应不了,因为当初程序不是这么设计的,但现实是当初的设计不能满足现状了,因此修改程序是不可避免的,所以问题的关键就在,如何修改程序,才能让我减少这种问题带来的痛苦,这也是进化论的关键之一。

 记得设计模式里面有个OOD,叫做封装变化,这里可以借鉴,以我目前的经历,我觉得应该可以把各种前后的锁定逻辑做成接口,把已经写在各自业务后台里的代码抽离出来,统统调用接口,这样以后改接口就好了,对于这些小后门,当我们要新增一个小后面的时候,不要直接通过改数据档来完成这个功能,而是通过将相关的业务后台做成接口,用小后门来调用这些接口来实现功能,这样即使不知道小后门的存在,无不会影响小后门的功能,我们只需修改下接口,一切就OK了。

 所以程序进化论的关键不是在于程序本身的适应性,而是环境变化时,我们作为程序维护人员,应该如何修正程序,来适应这种环境变化,这种修正的方法应该像基因一样,刻入到每个维护人员的骨子里,一旦出现这种状况,这个基因就是发挥其效能的时候了。

——————————————————————————————————————————————————

   第一次写博文,记录下自己的想法,希望对以后有帮助,我知道大概已经有书讲解过类似的问题,但是我还是想自己梳理下自己的思维,让自己成长。

© 著作权归作者所有

共有 人打赏支持
AlbertBoy
粉丝 1
博文 6
码字总数 2083
作品 0
武汉
高级程序员
私信 提问
分享几个国外模板网站(网页素材的下载)

成立正式用户,从公司的简介中发现他们做模板是根据用户需求以及使用风格,有专门的行情分析师(懂这个公司业务的)和专业美工人员。销售客服人员等等。就想一个小小的设计系统,从采单到设计到...

wbf961127
2017/11/13
0
0
JeeWx 捷微 3.1 小程序版本发布,支持微信公众号,微信企业号,支付窗

支持小程序,JeeWx捷微3.1小程序版本发布^_^ JeeWx捷微V3.1——多触点小程序版本管理平台(支持微信公众号,微信企业号,支付窗) JeeWx捷微V3.1.0版本紧跟微信小程序更新,在原有多触点版本...

Jeecg
2018/03/19
1K
8
吐槽一下!文明上网,理性发言!

那么多人说文凭不重要,个人觉得只是你自己自卑罢了。 1.不排除有人没文凭就很牛逼 比如 比尔盖茨。 2.今天刚看见一个言论: 1000个大专生中可能有10个人很牛逼,但是1000个大学生中就有可能...

指尖的舞者
2014/04/21
1K
29
JAVA版开源微信管家—JeeWx捷微3.2版本发布,支持微信公众号,微信企业号,支付窗、小程序

JeeWx捷微3.2微信企业号升级版本发布^_^ JeeWx捷微V3.2——多触点管理平台(支持微信公众号,微信企业号,支付窗、小程序) JeeWx捷微V3.2.0版本引入了更多新特性,支持微信公众号、微信企业...

Jeecg
2018/07/12
0
0
Kubernetes方法论之扫盲篇

随着容器逐渐受到企业的注意,焦点慢慢被转移到了容器编排工具上。复杂的工作负载在生产过程中需要成熟地被调度,编排,弹性扩容和管理工具。有了Docker,管理运行在主机操作系统上的容器以及...

Caicloud
2016/06/06
49
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 白掌柜说了卖货不卖身

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @爱漫爱 :这是一场修行分享羽肿的单曲《Moony》 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :开不开心? 开心呀, 我又不爱睡懒觉…...

小小编辑
今天
8
0
大数据教程(11.7)hadoop2.9.1平台上仓库工具hive1.2.2搭建

上一篇文章介绍了hive2.3.4的搭建,然而这个版本已经不能稳定的支持mapreduce程序。本篇博主将分享hive1.2.2工具搭建全过程。先说明:本节就直接在上一节的hadoop环境中搭建了! 一、下载apa...

em_aaron
今天
3
0
开始看《JSP&Servlet学习笔记》

1:WEB应用简介。其中1.2.1对Web容器的工作流程写得不错 2:编写Servlet。搞清楚了Java的Web目录结构,以及Web.xml的一些配置作用。特别是讲了@WebServlet标签 3:请求与响应。更细致的讲了从...

max佩恩
今天
4
0
mysql分区功能详细介绍,以及实例

一,什么是数据库分区 前段时间写过一篇关于mysql分表的的文章,下面来说一下什么是数据库分区,以mysql为例。mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可...

吴伟祥
今天
3
0
SQL语句查询

1.1 排序 通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后。 格式: SELECT * FROM 表名 ORDER BY 排序字段ASC|DESC; ASC 升序 (默认) DESC 降序 1.查询所有商品信息,...

stars永恒
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部