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

转载 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. 结对编程

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


相关文章推荐

C++11:使用 auto/decltype/result_of使代码可读易维护

C++11 终于加入了自动类型推导。以前,我们不得不使用Boost的相关组件来实现,现在,我们可以使用“原生态”的自动类型推导了! C++引入自动的类型推导,并不是在向动态语言(强类型语言又称静态类...

剑指XX游戏读后感(2):网易2011笔试题详解/sizeof和strlen/交换双向链表节/dll和lib和exe/8叉树减色/11盆花组合/宠物技能遗传/看virtual继承代码写输出

请区分sizeof和strlen? char array[] = "0123456789"; char* pointArray = "0123456789"; char arrayBig[100] =...

如何写出无法维护的代码

对于有下面这些编程习惯的朋友,请大家对号入座。另外,维护程序的朋友们,你们死定了!! If builders built buildings the way programmers writ...

抽象与可维护性和可拓展性的代码关系

在我还是学生时候写东西的时候,可能完成了某个功能就会兴奋不已,我还记得我去写第一个切换效果的时候,那时候的代码是这样的。 $('.button:eq('+0+')').on('click',funct...

如何写出高效可维护并且规范的js代码

设计原则: 1.原子思想:即每个function就做一件事; 2.归纳思想:将同一类的操作,全部整合到一起; 3.方便维护:可以便于后来人进行快速维护; 4.方便拓展:即可以根据每个不同的项目进行不...

编写具有可维护性的JavaScript代码

首先可定是缩进的问题了,有的人喜欢使用空格键,有的人喜欢使用tab键,不管是使用空格键还是使用tab键,在项目开始前,只要统一规范就可以了。 其次,确保只要通过变量或者函数的名字就能知道这段代码是干...

93. 就像要在要用一生去维护一般编写代码

 就像要在要用一生去维护一般编写代码 你可以问97个人每个程序员都应该知道什么和做什么,可能会听到97个不同的回答。这可能令人畏惧。所有的忠告都很好,所有的原则都很合理,所有的故事都很动听,但...

怎样写出无法维护的代码

每次写代码的时候,我都尽量写出一个尽可能方便其他人看得懂的代码,没办法,很多时候维护也是我自己,活着小的看不懂,还是我自己出手。但今天我想反其道而行之,怎样才能写出一份无法维护的代码。 原文在这里,原...

服务器维护系列——Matlab代码从Windows拷贝到Linux变成乱码

环境 Ubuntu 14.04 Matlab 2014b 问题 将matlab代码从Windows中复制到Linux中(或从Linux复制到Windows)时,matlab代码中的中文注释部分变成了乱...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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