如何让自己写的代码易维护?

转载 2012年03月23日 18:14:03


把修改放在最前面,因为我下面写的这些都不如一本书讲得清楚《Clean Code》

book.douban.com/review...

这篇书评可以先看看。

代码易于维护,分为两个方面:容易阅读理解;容易修改扩展。


一、如何写出容易被阅读和理解的代码


1. 最根本的一条,要向写文章学习,有目录,有大纲,有标题,有段落,有适当的提示。


1.1. 首先是目录结构,这个在一些比较好的实践中,有约定俗成,比如Rails应用,app目录下一定分controllers、models、views、helpers四个目录。再加上config、lib、vender,大致的代码在哪个位置,不用猜都知道。


越是常见的项目类型,越是应该按照约定俗成来构建项目的目录结构,不要别出新裁。


对于没有业内参考的项目,目录结构也尽可能采用简单、易懂、含义固定明确的单词,比如:core、config、test这样的命名。


1.2. 包名与文件名,在这方面,java语言的规范非常值得其他语言参考和借鉴,分层组织,合理命名。是最重要的。


1.3.一个源代码文件里,要不要有注释?我认为,尽可能不要,还是要像写文章一样,让人阅读起来,有感觉。比如:文件名,类名,方法/函数名。如果将所有的实际代码全部折叠起来,顺序的阅读这些名字,能不能让阅读者,对于这一个源文件的内容和目的,有大概的了解?

再强调一次顺序阅读,一个 源程序文件内有很多个函数/方法,这些方法的排列次序,是有意义的。仅仅依靠调整次序,比如:构造函数,扩展构造函数,简单的读写函数,业务相关的函数。以这样的次序来排列,会更加便于阅读。

在必须写注释的地方,也不要写得太多,言简意赅,把要点用1.2.3.讲清楚。 


1.4. 变量名,常数名,我们必须一再一再的强调命名的重要性,可以说,命名是软件开发中,头等重要的大事。要简洁、清晰、全英文(决对不要汉语拼音、任意缩写,但业内惯用的缩写是例外)、尽可能不要夹杂数字,比如var1、var2这样的变量名,就是最糟糕的。

2. readme


在项目开发的过程中,定期整理一份readme,放在项目的根目录,主要包含两部分内容:我们的代码做了些什么?如何查找我们写的代码。

github对于readme的自动展示,就突出了readme的重要性。

3. wiki


团队开发,尽可能维护一份wiki,自己架一个mediawiki或者其他wiki,都是很简单的。或者自己架一个redmine这样的集成项目管理工具,该有的就都有了。


wiki的管理维护是一个很大的话题,这里就不再展开了。


4. 单元测试


@李楠 和@KevinWei 已经提到了。 这个办法,既方便阅读理解代码,也方便修改代码。非常重要。


5. Code Review


@KevinWei 也已经提到了。


二、如何写出容易被改写和扩展的代码

1. 单元测试,最好全过程采用TDD(测试驱动开发)

这样才能让人有信心修改你的代码。 


2. 参考业内成熟实践与设计模式

这个事情,要多讲一句,千万不能过头。为了追求可扩展性,可重用性,甚至仅仅是为了玩弄设计模式,会让一个项目成为过度设计的牺牲品,千万不能过头。


3. 定期重构

一上来就向设计模式靠拢是很危险的,重构时以设计模式为参考会好一些。但是,大多时候,我们没时间重构。。。


所以,还是TDD最实在,按照TDD的工作模式,你的项目几乎每天都有大大小小的重构。


4. 结对编程

这个@李楠 已经提到了。让知识在团队中不只是一个人掌握,很重要。


软件的可维护性与可复用性

我们常说一个好的系统设计在于其有较高的可维护性和较高的可复用性。其实可维护性与可复用性是两个独立的目标,并不总是方向一致。         软件的维护就是软件的再生。一个好的软件设计,必须能够允许新的...
  • zsh2050
  • zsh2050
  • 2015年01月10日 16:01
  • 1201

软件的可维护性问题知识与分析

前言        很多包括自己在内的开发人员都会经常去借用(我们不用剽窃这个词了!呵呵)开源代码进行二次开发;或者在前辈的遗留代码下,继续修修补补。这种经历往往并不像看起来那么简单——有时看懂,进...
  • huwei2003
  • huwei2003
  • 2014年08月22日 16:28
  • 4107

JavaScript代码不好读,不好维护?你需要改变写代码的习惯

良好的编码习惯,这是每个程序员应具备的最基本素质。无论是前端程序员还是后端程序员,都要遵循基本的规范,减少因代码混乱而造成难以维护的局面。要做到不管有多少人共同参与同一个项目,一定要确保每一行代码都像...
  • u013794666
  • u013794666
  • 2015年03月18日 18:04
  • 526

[易飞]存在已审核的交易单据无库存交易明细(未纳入存货管理)

【摘要】物控部门查询品号供需明细表与库存明细账,发现查询无记录。而在2015-04-21存在进货单且已审核并验收合格。怎么办?重新库存,执行4月份重新计算库存,仍然无效。查询维护库存交易:以下是对比项...
  • david_520042
  • david_520042
  • 2015年05月04日 13:41
  • 1968

如何编写无法维护的代码(现实中有的程序员就是这么干的)

让自己稳拿铁饭碗 ;-) – Roedy Green(翻译版略有删节) http://blog.jobbole.com/80241/ 简介 永远不要(把自己遇到的问题)归因于(他人的)恶意,这...
  • huangkangying
  • huangkangying
  • 2014年11月27日 20:36
  • 18449

保持应用系统可维护性的八个实际措施

应用系统的可维护性: 整体组织;逻辑分割;细粒度措施;技术决策; 一致处理;有效隔离;消除重复; 对维护敏感...
  • shuqin1984
  • shuqin1984
  • 2013年09月03日 18:00
  • 3690

[易飞]维护工单成本:人工与制费异常,与下阶人工,下阶制费,下阶加工来源

维护工单成本:人工与制费异常财务同事报告: 首先会到品号信息中有记录本阶人工,本阶制费和本阶加工,检查发现有数据!!! 原来品号信息中本阶人工,本阶制费和本阶加工是标准成本计算使用的。 ...
  • david_520042
  • david_520042
  • 2017年04月07日 09:36
  • 814

第三方支付易宝支付的具体实现

无图无真相,所以先上一波图 做这个项目之前,你必须要有p1_MerId和keyValue,这个需要自己去官网申请的,这里我提供做测试的。p1_MerId="10001126856"和ke...
  • pan_haufei
  • pan_haufei
  • 2016年12月06日 19:02
  • 1761

网易2018校招内推编程题集合:小易喜欢的数列 [python]

''' [编程题] 小易喜欢的数列 时间限制:1秒 空间限制:32768K 小易非常喜欢拥有以下性质的数列: 1、数列的长度为n 2、数列中的每个数都在1到k之间(包括1和k) 3、对于位置相邻的两个...
  • qq_34617032
  • qq_34617032
  • 2017年11月20日 08:59
  • 59

如何写易维护和不易维护的程序

前几天把代码给同事,新员工刚来一两年,说基本上看懂我的程序了。从这可以看出我的程序是多么的易懂,当然也可能新同事水平很高?亦或是这个程序本来很easy。 事实是我那程序写的绝对的是一流的棒。 那么如何...
  • unsv29
  • unsv29
  • 2016年02月24日 15:00
  • 542
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何让自己写的代码易维护?
举报原因:
原因补充:

(最多只允许输入30个字)