文档章节

程序进化论之素材

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
03/19
0
4
《腾讯全球合作伙伴2017大会白皮书》AI解读之一:内容IGC

文·HCY崇远 01 写在之前 2017年11月08号,腾讯全球合作伙伴大会2017在成都举行,别误会,俺不在现场,虽然我也很想去看看,当时的我在大深圳某个旮旯里打代码。但通过一个貌似亲临现场的朋友...

数据虫巢
2017/11/10
0
0
JAVA版开源微信管家—JeeWx捷微3.2版本发布,支持微信公众号,微信企业号,支付窗、小程序

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

Jeecg
07/12
0
0
JeeWx 捷微 3.2 发布,支持微信公众号/企业号/小程序

JeeWx捷微3.2微信企业号升级版本发布^^ JeeWx捷微V3.2.0版本引入了更多新特性,支持微信公众号、微信企业号、支付宝服务窗等多触点平台。多触点模式采用微服务框架实现,可插拔可集成,非常轻...

Jeecg
07/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java 源代码和 C 源代码的运行区别

与其他程序的执行方式和编译方式不同。 Java 源代码需要进行编译成字节码后在 Java 虚拟机上运行,这样 Java 程序能够保持独立性和跨平台功特性。 请参考下图。 https://www.cwiki.us/pages...

honeymose
今天
3
0
Apache限定目录解析PHP,限制user_agent,PHP相关的配置

Apache限定目录解析PHP 配置前访问upload/index.php [root@test-a ~]# curl -x192.168.77.139:80 'www.test.com/upload/index.php'This is upload diretory 配置,/usr/local/apache2.4/......

野雪球
今天
5
0
java.util.Concurrent.Exchanger源码

类图 源码: package java.util.concurrent;import java.util.concurrent.atomic.AtomicInteger;import java.util.concurrent.atomic.AtomicReference;import java.util.concurrent......

狼王黄师傅
今天
6
0
Kubernetes里的secret最基本的用法

Secret解决了密码、token、密钥等敏感数据的配置问题,使用Secret可以避免把这些敏感数据以明文的形式暴露到镜像或者Pod Spec中。 Secret可以以Volume或者环境变量的方式使用。 使用如下命令...

JerryWang_SAP
昨天
5
0
2018-11-20学习笔记

1. python数据类型: 给变量赋值什么样的值,变量就是什么样的类型 给变量赋值整数,变量就是整数类型 给变量赋值字符串,变量就是字符串类型 123 和“123”一样吗? 在python中 单引号 与双...

laoba
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部