打造可高效维护代码的几个原则

来源:http://blog.csdn.net/lezhiyong

1      问题

1.1                  工程

功能越来越多,逻辑越来越复杂,模块越来越混乱、架构越来越复杂

常见问题:

1、模块A发消息给其他模块处理,B模块-》转发消息给C-》转发给D-》转发给A

2、初始头文件功能定义清晰,越到后面里面东西越混乱。

3、各模块内重复实现基础功能。

1.2                  个人开发

1、对前人代码:

不能理解前人代码的思想,新功能自成一套体系。

造成大量重复代码和重复变量,造成命名重复、冲突的函数、类与变量。

案例1:两个iStartRecorder,仅参数不一样。

两个iStartRecorder,仅参数不一样,但一个表示启动录制编码器,一个表示启动录制服务器,根据两个函数编写时间,很明显这是后者不理解前人Recorder的含义而添加上的代码。后把后者命名调整为iStartRecordService:

案例2:

对于以下的一个工程:

以****Impl.cpp标志的类,一个是继承****类或者是****的创建者,本案例中需要从类实例化过程中很容易体会到RssMgrlmpl、RssManager、CrssImpl之间的组合/聚合关系。

RssMgrlmpl:继承rmManager,是接受到sip信令的实现,是RssManager的创建者。

RssManager:录制任务的管理者

CRssImpl:是CRssAvRecorderMgr的创建者。

CRssAvRecorderMgr:是任务中ReCorder的管理者

当需要创建新类的时候尽量保持与前人思想一致。(无优劣之分时按添加的代码量少数服从多数)

2、对自己代码:

忌不遵从当前工程所用的架构,使用自己熟悉的其他方式。

1、使用通用软件规范和模式设计思想。

2、对有自己想法和创新的代码做好标注,以便别人理解。

案例:

慎用递归架构            (递归函数)

一个视频窗口中实现双流视频(标准流+低流),原来已经实现标准流

Class VideoCell//单路标准视频处理逻辑

{

Public:

//视频流接收函数

Private:

////标准流变量

}

Class WinVideoCell//windows视频窗口

{

Public:

//windows对视频窗口的操作方法

Private:

VideoCell m_videoCell;

}

Class WinVideoLayout//视频面板

{

WinVideoCell m_arrWinCell[25];

}

递归方式实现:

Class VideoCell//视频窗口

{

Public:

//标准流方法

Private:

//标准流变量

VideoCellm_LowFlowCell;

}

弊端:VideoCell的类函数调用如果控制不好,将陷入VideoCell函数递归调用的迷魂阵

标准实现方式:

Class WinVideoCell //windows视频窗口

{

Public:

//windows对视频窗口的操作方法

Private:

VideoCell m_videoCell;

VideoCellm_LowFlowCell;

}

3、其他常见问题:

数据都以 void * 形式传递,然后再造型为合适的结构

Switch 里边还有 Switch,这种嵌套方式是人类大脑难以破解的

2      几个原则

2.1                  唯一性原则

1、库函数:只在一个类中使用

2、同样的功能只使用一个接口对外提供功能。

3、只要是重复的东西尽量合并

相同特征抽象成基类

相同方法抽象成虚基类或相同接口

相同逻辑抽象成相同函数

2.2                  一致性原则

1、不同模块中的语言与风格、信令结构、宏定义方式

2、分配和释放资源的结构一致:在同一代码结构层面上使用,同一个类中提供,同一个各cpp全局函数中提供。

2.3                  对称性原则

1、 命名对称start-stop,init-uninit,

函数位置对称

2、工程结构对称,了解一个工程结构,其他工程结构类似。

3、

3      如何做到

3.1              个人要求

1、对自己代码:持续开发,持续改进

2、对别人代码:从全局的角度理解前人代码思想,未了解前保持现状

3、别人到自己:规范的传承

3.2              工程要求

1、 头文件看护,架构头文件,专人看管,提交审核

2、 定期检视与整改,将走错门的代码重新归队,将违规的代码纠正

3、 新人了解项目结构和头文件

时间: 2024-10-06 21:27:30

打造可高效维护代码的几个原则的相关文章

学习PHP精粹,编写高效PHP代码之自动测试

如果要制造出完美的产品,必须对它进行全方面检验测试.这里有几种类型的测试,每一种测试都针对应用程序的某个具体方面. 本文将对单元测试.数据库测试.系统测试.负载测试进行介绍. 一.单元测试 单元测试是测试应用程序的每一步,要确保其各个组成部分运转正常.若没有单元测试,在应用程序中找出导致错误运行的原因一般来说相当困难. 单元测试通常采用一个单元测试框架,它提供了编写和运行测试并输出结果所需要的基本结构. 一些较为常用的单元测试框架包括: PHPUnit:http://phpunit.de/ Si

如何编写高效android代码

基于Android相关设备作为嵌入式设备范畴,在书写App应用的时候要格外关注效率,并且受电池电量的限制.这就导致嵌入式设备有诸多考虑.有限处理能力,因此就要求我们尽量去写高效的代码.本文讨论了很多能让开发者使他们的程序运行更有效的方法,遵照这些方法,你可以使你的程序发挥最大的效力. 引言 对于占用资源的系统,有两条基本原则: 不要做不必要的事 不要分配不必要的内存 所有下面的内容都遵照这两个原则. 1.避免建立对象 世界上没有免费的对象.虽然GC为每个线程都建立了临时对象池,可以使创建对象的代

学习PHP精粹,编写高效PHP代码之安全性

一.过滤输入.避免输出 有时我们将短语"过滤输入.避免输出"缩写为FIEO,这已成为PHP应用程序的安全真言. 1.利用ctype进行验证 ctype:http://php.net/ctype 2.利用PCRE(Perl兼容的正则表达式)进行验证 PCRE:http://php.net/pcre 二.跨站脚本 跨站脚本通常简称为XSS,攻击载体以在应用程序输出中由用户提供的变量所在位置为目标,但该变量没有适当地转义.这允许攻击者注入他们选择的一个客户端脚本作为这个变量值的一部分.下面是

用python编写一个高效搜索代码工具

用python编写一个高效搜索代码工具大多码农在linux环境下使用grep+关键词的命令搜索自己想要的代码或者log文件.今天介绍用python如何编写一个更强大的搜索工具,windows下也适用.我们的需求:1, 可以同时指定多个关键词.比如某个文件某一行中有"error: aa bb cc",如果检索关键词error和cc则可以显示该行,避免单一关键词冗余信息太多2, 可以排除某些关键词.对于"error: aa bb cc" ,如果设定排除bb,则不予显示该

SoC嵌入式软件架构设计之三:代码分块(Bank)设计原则

上一节讲述了在没有MMU的CPU(如80251.MIPS M控制器系列.ARM cortex m系列)上实现虚拟内存管理的集成硬件设计方法,新设计的内存管理管理单元要实现虚拟内存管理还需要操作系统.代码分块(Bank)的支持,详见SoC嵌入式软件架构设计之二:没有MMU的CPU实现虚拟内存管理的设计方法.这里要阐述Bank设计的一些原则. Bank设计是为了实现不同时刻运行的Bank(代码块)运行在同一块内存上,所以在运行之前操作系统需要将已存在内存的代码/数据进行缓存处理,并加载将要运行的Ba

如何高效编写可维护代码?

原文:How to make your code self-documenting? 译文:怎么让代码自我文档化? 译者:dwqs 在代码中找到一个放错地方并且没有用的注释是不是很有趣呢? 怎么样才能做到写很少的注释但仍能让代码易于理解呢? 一个主要的方式就是让代码自我文档化.当代码自我文档化的时候,就不需要注释去它的作用或者目的,并且也能使代码变得非常容易维护. 在这篇文章中,我将提供一些让你的代码自我文档化的方式.下面就是三种使得代码自文档化的基本方法: 命名:利用名字来解释变量.函数等的目

带你玩转Visual Studio——带你高效管理代码

上一篇文章带你玩转Visual Studio--带你高效开发通过对VAssistX优秀插件的讲解,让我们掌握了快速开发C++代码的技能.然而大部分的程序都不是一个人的开发的,是由一个团队的多个人一起开发的,大型的系统还可能由多个不同的团队分包进行开发.多人进行协作开发时,代码的管理就显得及为重要,需要借助代码管理工具的辅助,这种工具又称为版本控制系统. 目前主流的版本控制系统有: CVS:是一个用于代码版本控制的自由软件,它是一个比较早出现的工具,由于它有很多自身的缺陷,现在几乎被SVN所取代了

怎样编写高效java代码

代码质量概述 怎样辨别一个项目代码写得好还是坏?优秀的代码和腐化的代码区别在哪里?怎么让自己写的代码既漂亮又有生命力?接下来将对代码质量的问题进行一些粗略的介绍.也请有过代码质量相关经验的朋友提出宝贵的意见. 代码质量所涉及的5个方面,编码标准.代码重复.代码覆盖率.依赖项分析.复杂度分析.这5方面很大程序上决定了一份代码的质量高低.我们分别来看一下这5方面: 编码标准:这个想必都很清楚,每个公司几乎都有一份编码规范,类命名.包命名.代码风格之类的东西都属于其中. 代码重复:顾名思义就是重复的代

高效JQuery代码编写

缓存变量 DOM遍历是昂贵的,所以尽量将会重用的元素缓存. // 糟糕 h = $('#element').height(); $('#element').css('height',h-20); // 建议 $element = $('#element'); h = $element.height(); $element.css('height',h-20); 避免全局变量 jQuery与javascript一样,一般来说,最好确保你的变量在函数作用域内. // 糟糕 $element = $(