`
james_lover
  • 浏览: 42817 次
社区版块
存档分类
最新评论

一个方法几千行的程序是如何产生的?

 
阅读更多
最近查看公司的代码,发现有很多体积很大的类,其中一些方法竟有几千行。

这些方法有些共同的特点:

包含大量巨大的if else嵌套。
伴随着大量的magicnumber。
存在大量的重复代码。
难以测试。
对于任何一个没有足够业务知识的人,完全不可读。

这些代码成长过程都很相似:

第一个人:把业务流程和业务代码封装在一个类里。业务不复杂,代码看起来还行。
第二个人:业务流程不变,但新增了业务需求。把第一个人的部分代码copy过来,修改几个业务代码,然后用一个大大的if else包裹起来。
第三个人:把第二个人的copy过来,也用if else包裹起来,增加一些magicnumber。
后面的人:重复前任的工作。
两年以后,就像我眼前看到的这份代码。 要避免这种情况,我觉得责任主要在第二人和第三个人。他们的工作不能仅是简单的copy,而应该重构。按照业务流程与具体业务解耦,业务之间解耦,独立业务聚合的原则:

首先,把以前代码中“业务流程部分”分离出来,作为流程处理类。
把具体业务抽象成接口,交给流程调用。
把每个业务独立分开,实现业务接口,不同的业务之间不存在耦合。
每个独立的业务,其业务逻辑代码只存在于一个class里。
这样后来人新增业务,会copy前人的实现类, 修改一些业务代码和逻辑。却不会形成如此巨大的方法。
分享到:
评论

相关推荐

    【防破解】程序轮回加载128世

    就像人生一样,调试器跟踪的只是你的上一世,甚至是几百几千世前的你,而现在的你还好好的活着 因为程序是同一个程序,凭什么上一辈子要立即轮回,而这辈子就可以正常存活 于是.... 这个代码,循环7次,每次产生一个...

    windows 程序设计

    当子系统的数目在Windows最近版本中增多时,大多数典型的Windows程序产生的函数呼叫仍对应到这三个模块之一。Kernel(日前由16位的KRNL386.EXE和32位的KERNEL32.DLL实现)处理所有在传统上由操作系统核心处理的事务...

    编写程序高手的造就的文章

    有一个朋友,几年前我介绍他去玩玩linux,他也表示想玩,但他现在还没碰过。他失去了很多机会。 平时要有意识提高自己写代码的速度,其实你一天写15行有效代码,与你写50行有效代码,其品质是差不多的。你应该把...

    50 份 几千页 优质行业分析报告-隐私计算、机密计算、芯片、边缘计算、可信计算、数据安全、智能汽车

    50 份 几千页 优质行业分析报告-隐私计算、机密计算、芯片、边缘计算、可信计算、数据安全、智能汽车 机密计算是由机密计算联盟 (CCC) 定义的一个行业术语。CCC 是专业定义机密计算并加速其采用的基金会。 CCC 定义...

    Google技术之MapReduce

    我们的MapReduce实现运行在规模可以灵活调整的由普通机器组成的机群上,一个典型的MapReduce计算处理几千台机器上的以TB计算的数据.程序员发现这个系统非常好用:已经实现了数以百计的MapReduce程序,每天在Google的...

    单片机音乐程序的设计原理解析

    我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单处机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”...

    AOLserver4.5源码+Windows下可执行程序+tcl8.5.7+HTTP Cookie Library

    大约在 1994 年时,在美国加州的圣芭芭拉市,两位 Unix 的高手,Jim Davidson 及 Doug McKee, 设计了一个 Web 出版系统,其中一部分是一个所见即所得的网页编辑程序,叫做 NaviPress。而他们所成立的 NaviSoft 公司...

    计算机信息安全技术考试答案

    这些密钥产生程序都使得DES的攻击难度比正常情况下低几千倍。因此,对于任何一种加密方法,其密钥产生方法都不容忽视。 大部分密钥生成算法采用随机过程或者伪随机过程来生成密钥。随机过程一般采用一个随机数发生器...

    MapReduce超大机群上的简单数据.doc

    我们的MapReduce实现运行在规模可以灵活调整的由普通机器组成的机群上,一个典型的MapReduce计算处理几千台机器上的以TB计算的数据.程序员发现这个系统非常好用:已经实现了数以百计的MapReduce程序,每天在Google的...

    降低权限 dropmyright

     还有一个细节问题,那就是我如何方便的得到程序的安装路径呢,手工KEY IN还是不够方便,一个简便的方法是为程序创建一个快捷方式,然后在此快捷方式上点击右键,查看其属性,在“目标(T)”一栏显示的就是程序...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    8.5.2 例1:从前一行中返回一个值 203 8.5.3 理解数据行的位移 204 8.5.4 例2:从下一行中返回一个值 204 8.6 First_value和Last_value 205 8.6.1 例子:使用First_value来计算最大值 206 8.6.2 例子:使用...

    自己动手写操作系统(含源代码).part2

    Linux就是这么产生的,Linus Torvalds当时是一名赫尔辛基大学计算机科学系的二年级学生,经常要用自己的电脑去访问大学主机上的新闻组和邮件,为了方便读写和下载文件,他自己编写了磁盘驱动程序和文件系统,这成为...

    自己动手写操作系统(含源代码).part1

    Linux就是这么产生的,Linus Torvalds当时是一名赫尔辛基大学计算机科学系的二年级学生,经常要用自己的电脑去访问大学主机上的新闻组和邮件,为了方便读写和下载文件,他自己编写了磁盘驱动程序和文件系统,这成为...

    延云YDB-运行程序v1.0.1

    50台规模的hadoop集群,几亿条数据,一个MR任务要运行几小时,每天也就能进行几百次查询。 如何能让任务的执行时间缩短到秒级响应,每天能执行千万次查询。 Hbase只接受KV形式的存储,数万个维度的大宽表,如何...

    【文献综述】基于JAVA的俄罗斯方块游戏设计与实现.pdf

    实现跨平 台性的方法是大多数编译器在进行 Java 语言程序的编码时候会生成一个用字节码 (Bytecode)写成的"半成品" ,这个"半成品"会在 Java 虚拟机[7](解释层)的帮助下运 行,虚拟机会把它转换成当前所处硬件...

    延云YDB-运行程序v1.0.2_运行程序17

    YDB是我们自主研发的一个大型分布式索引系统。旨在为数据总量为万亿级别、每天千亿级别数据增量的项目提供近似实时的数据导入,并提供近似实时响应的多维查询与统计服务。 大索引技术 为什么要使用大索引?使用后会...

    基于模拟器armulator v2.0的X264开发与优化

    如果你是一个ARM平台的video算法爱好者,或者开发优化工程师,你将会从这里领略到ARM模拟器带来的无穷魅力。 armulator.exe是最快的ARM指令集模拟器(性能是qemu的两倍),支持ARM7,ARM9,ARM11,Cortex/Thumb,可直接...

    excel的使用

    合并不同单元格的内容,还有一种方法是利用CONCATENATE函数,此函数的作用是将若干文字串合并到一个字串中,具体操作为“=CONCATENATE(B1,C1)”。比如,假设在某一河流生态调查工作表中,B2包含“物种”、B3包含...

Global site tag (gtag.js) - Google Analytics