`

什么是好的代码??---一点感想

阅读更多

什么是好的代码? 以下是我的一点感想,可能回答不完整,欢迎大家补充。

 

好的代码一定要有好的设计和规范来保证。仅以此篇来与项目组的同事们达成共识,在编程实现中考虑这些问题,并在代码检查中贯彻下去,这才是真正的目的。

 

这些条条框框大家说起来可能都懂,但是不是将这种思想真正的印记在脑子里,贯彻在行动上,产出的代码是不是能成为好的代码,这是一个素养问题,与程序员平时的

 

积累、思考有关。

 

(1)代码粒度合适

 

 每个类包含的方法合适,每个方法包含的代码量合适,而非满屏一个方法。切实的方法是对大的方法类,有一定的敏感性,书写短小精悍的代码。怎么创建粒度合适的代码呢?设计类从领域模型入手,设计方法考虑尽量考虑你的代码意图,小的意图产出小的方法,也可以规定一个方法不要超过一定行。

 

(2)高内聚,松耦合

 

这与(1)有些类似,但是只是粒度合适不一定就满足高内聚松耦合,这就要求从设计的高度,从业务的角度进行系统分析。可以采用测试驱动设计的思想,从是否能够单独单元测试来考虑是否可以将模块间的代码解耦。另外,如果方法过大,这个类就承担了过多的职责,一定不是高内聚的,违反单一职责原则。

 

 

(3)有一定的扩展性、灵活性

可以采用设计模式,解决这个问题,也可以从设计产品的角度,考虑如果是下个项目这部分代码能否以更小的修改代价进行。

 

(4)意图清晰

好的代码从命名开始。设计一个类命名需要清晰表达你的意图,采用设计模式需要清晰表达你的模式名称,比如***Strategy,不要写一些没有业务逻辑含义的命名,或者是太具有泛化、模糊含义的名称,或者是程序员语言的代码,比如getColumnModel,这在ext grid中命名是可以的,但是如果写在企业级应用的系统中,没有人能读懂到底要干什么。

 

(5)统一的规范

除了代码命名规范外,还有系统设计、处理的规范,比如异常处理的规范,是checkedexception还是checkedexception,异常在那一层处理,如何处理依赖?

如何处理事务,在哪一层处理事务?action层不要包括太多的业务逻辑,什么是代码坏味道。

 

前3项都是由好的设计来保证的,可见我们的设计直接影响了我们的代码质量,设计大多是由设计师或者技术经理完成,所以项目设计师或者技术经理对于控制代码质量是多么重要。

 

后记:

首先欢迎大家拍砖。我只是从正面角度回答了这个问题,那么从反面角度也可以提问:什么是不好的代码?哪些是代码的怀味,这些就要参考《重构》大作了。

 

写这篇文章是看到很多技术不错的同事忙乎于各种技术框架,编程语言,新的技术,但是可能忽视了程序员的一些基本素养;另一方面,大家各忙各的,一个团队却没有统一的共识,如果大家都一致认为这不是好的代码,这是代码坏味,每个人都能察觉并贯彻某些原则再好不过,统一共识对团队来讲是个起码的问题。


其次,也是希望大家都能重视代码质量(大家都说我重视啊,可是看看我们自己写的代码就知道自己可能在说谎,控制代码质量是一个团队行为,而不仅仅是个人责任),因为代码质量就意味着工程质量,差的工程质量就是增加成本。好的代码肯定bug少,修改bug容易,每个人都乐于修改、查看、学习别人的代码,而不是看到别人的代码就很头痛,别人看你的代码也很心烦,这样就造成代码在团队中不能共享。项目组如果能够产出好的代码,赏心悦目的代码,对维护人员是喜事,对我们自己那就是一种美了,编程之美。这个过程其实是让我们真正快乐的东西,毕竟你做了让别人觉得是有价值的东西,美的东西。

 

 

分享到:
评论
7 楼 1927105 2010-06-27  
H_eaven 写道
对不好的代码感触越深,
对好的代码感触才越深.


一看就知道是高手
犀利的话,,赞一个,,
6 楼 liwenjie 2010-06-27  
前文提到,好的代码不仅仅是个人责任,而是团队责任。对项目组来讲,怎么比较容易地得到好的代码,不仅仅是靠个人素养。我试图从设计这道关卡,就关注代码质量。

从设计角度,可以解决粒度、耦合、灵活性这些问题,这些问题解决好了,往往更容易产出好的代码。比如粒度合适,类不会过大,方法不会过大。而设计工作可以由多人参与,减低了个人对代码质量完全控制的风险。

设计问题做好了,就是对于初级程序员,去填充架子,也容易产生好的代码。
5 楼 MySSH 2010-06-27  
确实是这样的~~设计很重要~~
4 楼 85977328 2010-06-27  
真正的高手,不是设计
而是去理解,维护并修改别人的代码
3 楼 kjj 2010-06-27  
H_eaven 写道
对不好的代码感触越深,
对好的代码感触才越深.


精辟 
2 楼 H_eaven 2010-06-27  
对不好的代码感触越深,
对好的代码感触才越深.
1 楼 yuantong 2010-06-27  
(5)统一的规范
   ----我想这个只适用于团队(团队有内定的规范),对于个人而言,遵从语言规范就OK了……

相关推荐

    matlab求累加代码-How-to-Read-and-Write-Research-Paper:理工科论文阅读与写作的一点总结与感想

    matlab求累加代码 理工科论文阅读与写作 理工科论文阅读和写作是一项基本和重要的工作,因此必须重视对它们的训练和提升。本文是对ViaX论文写作课的直播总结,内容主要来自老师的讲解和PPT,也会附带一些自己的感想...

    关于物联网的一点感想 (2).docx

    3. **电子产品编码(EPC)**:一种用于标识产品的唯一代码,通常与RFID标签结合使用,以便追踪和管理物品。 4. **IPv6系统**:作为IPv4的升级版本,IPv6提供了几乎无限的地址空间,能够支持大量的物联网设备连接...

    matlab代码积分-nonlinear_homework:非线性方程组数值解作业

    matlab代码 积分 Readme 这是我在研一下学习非线性方程组数值解时的MATLAB代码记录。 第一次作业是让我们找个100维的非线性方程组,然后后面几次的作业是让我们用不同的迭代方法迭代计算他的数值解,并比较不同解法...

    数控机床维修资料与感想.doc

    了解这一点对于维修人员来说至关重要,因为这关系到机床整体性能和故障分析的准确性。 在遇到具体的数控机床故障时,如FANUC系统的449报警,这通常意味着IPM(智能电源模块)检测到异常。IPM是一个集成模块,它集成...

    JavaScript 开发中规范性的一点感想

    代码如下://待需要时另存为一个js function isNull(obj) { if (!obj || obj.length==0 || obj==””) { parent.MyAlert(“标注名不能为空!”,alertImg); return false; } else { return true; } } // 验证...

    JavaScript高级程序设计读书感想——第七章

    在闭包中,`this`的指向问题也是需要注意的一点。默认情况下,匿名函数中的`this`通常指向全局对象(在浏览器环境中是`window`)。但在闭包中,由于作用域链的特性,`this`的值取决于其调用方式,而不是定义时的位置...

    2020美赛C题资料.zip

    关于2020年数模美赛c题的,题目,数据,文献资料,一些代码,以及思路和感想。其中在感想部分谈及了C题两种解答方法的对比(评论处理方法,另一种是我们老师带的另外几队拿了H奖的)。我们对这次论文交的比较匆忙,...

    Java游戏设计打飞机小游戏有源代码和论文.zip

    但是我的水平实在有限,在第5章列举的众多BUG和遗憾就可以看出这一点来,但我相信,随着时间的推移,个人水平的增长,我一定会重写这个程序,使其更加完善, 6.2 感想 这款游戏作为我的毕业设计,是本人目前做过的...

    王爽汇编语言第二版

    内容到是什么都有,看了就不知道在讲个什么,什么都讲不清楚,就知道赚钱)我是学信息系?的学生,关于计算机科学方面我的这个专业学的不是太多,我就自己学,看了很多书,国内像这样的好书真的是很难得。3、更珍贵的...

    汇编语言_第2版(王爽).part1

    内容到是什么都有,看了就不知道在讲个什么,什么都讲不清楚,就知道赚钱)我是学信息系?的学生,关于计算机科学方面我的这个专业学的不是太多,我就自己学,看了很多书,国内像这样的好书真的是很难得。3、更珍贵的...

    MFC数字图像处理(BMP格式读取 保存 DFT FFT 直方图 色调均化 缩放 模糊 锐化 滤镜 形态学处理 曲线 裁剪 灰度图 彩色图 自动阈值)

    最后,无论是DFT还是FFT全都是自己一个代码一个代码写上去- -,研究傅里叶变换还把信号与系统的书都拿出来了,所以这次的作业真的好辛苦啊! 所以虽然功能尚未完善,但是请体谅!最后,再次谢谢师姐能够读完这个文档...

    大学生java实习总结报告(多篇).docx

    - **参数设计**:费率设置关乎计费逻辑,测试中出现的小数输入问题暴露了代码复用时的疏忽,强调了灵活性和针对性设计的平衡。 - **帮助设计**:帮助文档应当准确反映程序功能,提供清晰的用户指南,与程序特性...

    c语言青蛙过河小游戏.zip

    c 代码 ===================================================== 程序名称:青蛙过河小游戏v1.0 编译环境:Visual C++ 2010 =============================== 作者感想: 这是一个很典型的游戏, 很多程序使用的...

    javashuffle源码-MapReduce-Demo:Hadoop,MapReduce编程学习练手实例

    这里放一个我学习MapReduce的编程实例项目吧,本来是想把这些分开写成多篇文章的,能够详细叙述我学习过程中感想。但无奈,时间不够,只好在Github上创建了该项目,在代码中由较为详细的注释,我想也足够了吧。 该...

    性能设计技术之浅谈过载保护

    这里用两个曾经经历的反面案例,给出过载保护的直观展现,并附上一点感想。案例一基本情况如下图,进程A是一个单进程系统,通过udp套接字接收前端请求进行处理。在处理过程中,需要访问后端系统B,  过载保护,看似...

    关于javascript中this关键字(翻译+自我理解)

    希望能对有需要的人一点帮助。。。 首先,先看一个很典型的关于this关键字题目: 代码如下: var name = ‘hong’ var obj = { name: ‘ru’, getName: function(){ return function(){ return this.name; }; } } ...

    表达式求值(C语言栈)数据结构

    3. **代码实现**:展示C语言实现的关键代码段,如栈的定义、压栈、弹栈函数,以及表达式求值的主逻辑。 4. **测试用例**:列出一些测试表达式,展示其输入和预期输出,以验证算法的正确性。 5. **性能分析**:讨论...

Global site tag (gtag.js) - Google Analytics