程序可修改性非常重要,毕竟世界总是动态变化的,以前写的程序在新条件下可能不满足需求,也有可能程序需求在初始阶段并没有搞明白,后来就越来越清楚了。总之,程序需要被修改或者直接重写。如果总是重写,从零开始,成本是很大的。如果有之前的积累,至少和别人相比,起点也会高些。但是,如果程序可修改性太差,也有可能会让我们陷入泥潭,还真不如轻装上阵来的自在!

首先,怎么才算可修改性高呢?我觉得有两个指标:

一、修改本身实现起来容易

二、修改不影响程序其他部分

下面,我们看看为了实现这些目标,都有什么策略。修改本身容易,我觉得分为两种情况:

(1)      任务量减少了

(2)      任务量不变,但效率提高了

减少任务量

怎么让一个修改的任务量减少呢?可能是一个好的主意让任务量减少,比如说《五军之战》,目标是矮人要击败半兽人,怎么办,可以硬抗,但是任务量大,还不一定抗得住;电影里面,是擒賊先擒王,任务量不知道少了多少个等级,结果还胜了。还有一个办法就是复用,利用以前的工作,使得本次任务量降低。总结起来就是:

a)        一个好主意,使得任务量变低

b)        复用,总任务量不变,但本次任务量降低了

一个好主意,可遇而不可求,我们也不做苛求,所以减少任务量的主要办法就是复用。复用说起来容易,实现起来实际上很难的,并且要克服自己的直觉习惯,每次实现的时候,要想想哪些可以复用。可以参考设计模式来获得更多复用的灵感。

提高效率

任务量不变情况下,提高效率,我觉得有两种办法:

a)        自动化

b)        并发

自动化,是利用工具或者脚本来代替我们工作,从而提高效率。甚至有一些更高级的,比如说一些uml工具可以自动生成代码等等。要支持并发,其实也离不开自动化工具,多个自动化工具同时进行,效率会大幅提升。只不过需要任务的基础架构支持并发。

依赖稳定

第二个指标是修改不影响程序其他部分,可以把它分为三种情况:

(1)      修改和其他部分独立

(2)      就是不独立,想连部分保持不变

(3)      实在要变,把影响降到最小

我们先来说第一个,修改和其他部分独立,换种说法就是其他部分不依赖修改部分。这里有一些基本原则,可以遵守:高层模块不应该依赖底层模块,抽象不应该依赖细节,细节应该依赖抽象。简单来说就是容易变的应该依赖不怎么变的。比如说有两个不同对象a,b。它们如果要互相通讯,有三种办法:

a)        a 调用b,b调用a

b)        a 调用b,a 监听b事件,收到b的信息

c)        b 调用a,  b监听a事件,收到a的信息

如果图简单方便的话,a)是首选,也是直觉上的自然选择。如果稍加考虑,看看依赖关系,比如说b是容易变的,此时不应该让a依赖b发生,所以最后就应该选c)。

接口编程

如果实在要依赖,那么就要依赖接口,并且保持修改的时候,接口保持不变。在设计模式中,实现了变化,但是接口却保持不变的有几个相关模式,比如:适配器、装饰器、代理等等。

影响最小化

最后,实在没办法,接口也要变。一种办法是把变化封装到一个模块内,这就涉及到基本功,类设计的时候,按照职责分配,提高内聚性,并把模块粒度控制在一个合理的大小范围内。第二个办法是基于外部的,利用中介把外部几个都依赖修改的转换成都依赖中介,然后让中介一个依赖修改。不过,这个设计需要前期判断,觉得哪个地方出现变化的概率大,不然会出现很多无用功。

转载于:https://www.cnblogs.com/simplevita/p/4232073.html

怎么提高程序的可修改性相关推荐

  1. [.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(三) 利用多线程提高程序性能(下)...

    [.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(二) 利用多线程提高程序性能(下) 本节导读: 上节说了线程同步中使用线程锁和线程通知的方式来处理资源共享问题,这 ...

  2. JAVA用多线程反而变慢了_Java中使用多线程不能明显提高程序效率的一些原因

    java中使用多线程不能明显提高程序效率的一些原因. 使用多个线程来处理多任务的时候,效率肯定是有提高的.但是必须要慎用,否则容易出现问题. 1.多线程主要是为了充分利用多核cpu,大内存这些资源. ...

  3. 使用 ABAP 开发的一个基于 Web Socket 的小工具,能提高程序员日常工作效率

    程序员区别于其他岗位的一个优势是,我们可以充分利用自己掌握的编程语言,将平日一些琐碎的,重复的日常工作,通过代码来实现自动化,从而省下更多的时间来投入到技术含量更高的工作中,提高工作效率. 本文介绍一 ...

  4. c# 定位内存快速增长_改善C#程序,提高程序运行效率的50种方法

    转自:http://blog.sina.com.cn/s/blog_6f7a7fb501017p8a.html 一.用属性代替可访问的字段 1..NET数据绑定只支持数据绑定,使用属性可以获得数据绑定 ...

  5. 盘点提高程序员技术的5个免费编程网站,你知道几个?

    乔布斯说过,每个人都应该学习给电脑编写程序的技术,因为这一过程能够教你如何去思考.而学习编程的方式有多种多样,你可以通过看书.视频教学的方式学习编程. 对于现在的程序员而言,在编程的过程中必不可缺少的 ...

  6. 如何提高程序员的生产率 (1)

    2019独角兽企业重金招聘Python工程师标准>>> 版权声明:本文由韩伟原创文章,转载请注明出处:  文章原文链接:https://www.qcloud.com/communit ...

  7. C++如何提高程序效率

    C++如何提高程序效率 程序的时间效率是指运行速度,空间效率是指程序占用内存或者外存的状况. 全局效率是指站在整个系统的角度上考虑的效率,局部效率是指站在模块或函数角度上考虑的效率. [规则11-2- ...

  8. 《C Primer Plus》第二章——C语言概述(程序示例与解释,提高程序可读性,函数的定义与使用,调试,关键字,复习题与编程练习)

    文章目录 第二章-C语言概述 本章内容 简单的C程序示例 示例解释 快速概要 程序细节 简单程序的结构 提高程序可读性的技巧 进一步使用C 多个函数 调试程序 语法错误 语义错误 程序状态 关键字和保 ...

  9. 如何提高程序员键盘使用效率

    对于大多数程序员而言,键盘的使用时长或许比鼠标更多,所以对于如何使用键盘来提高工作效率是一个非常重要的问题,本文章通过以下几个方面来提升程序员的键盘使用效率: 一:程序员常用的快捷键及vi指令 自从7 ...

最新文章

  1. 1231. The Embarrassed Cryptography
  2. 激光SLAM学习--多种类激光雷达介绍(单线、多线)
  3. ITK:将不断变化的密集2D水平集可视化为高程图
  4. dell笔记本指示灯闪烁_带你认识电脑电源状态指示灯不同亮度不同含义
  5. 编译原理什么是移进规约冲突_编译原理复习题
  6. 解决413 Request Entity Too Large
  7. 如何从OnDocumentComplete事件中获得当前frame的html代码
  8. Jmeter3.1官方自带的HTML图形测试报告 + 汉化
  9. FR-TO-FR本地交换
  10. Bailian2696 计算表达式的值【入门】
  11. 【转】推荐:全面了解数据库设计中分类算法
  12. android schedule 参数,android – requestLocationUpdates minTime参数的用途
  13. ES6 var,const , let三者区别
  14. 算法复杂度-渐进分析 (Asymptotic Analysis)
  15. 皮皮虾小视频怎么去水印
  16. 山东大学人机交互技术复习纲要
  17. windows 打印机管理机制(任务后台等待机制)
  18. 华为OD机试 - 执行时长(Java JS Python)
  19. c语言找出一个数组中出现次数最多的那个元素,c语言找出数组中出现次数最多地那个元素...
  20. AP_HAL 分析, 以pixhawk-fmuv2为硬件平台,ChibiOS为底层操作系统:

热门文章

  1. 移远BC35-G模组通过LWM2M协议接入OneNet教程
  2. R7 7735HS参数 锐龙77735HS怎么样相当于什么水平级别
  3. 化工厂人员定位保障安全管理
  4. 实例分割总结 Instance Segmentation Summary
  5. 08 web原理与web测试
  6. 1001: 植树问题 ZZULIOJ
  7. 【NOIP2014】提高组初赛答案加解析
  8. 网站商务通与百度商桥的区别
  9. python学习——HTMLParser
  10. Activity系列博客5篇