1.DRY
DRY 是一个最简单的法则,也是最容易被理解的。 但它也可能是最难被应用的(因为要做到这样,我们需要在泛型设计上做相当的努力, 这并不是一件容易的事)。
它意味着,当我们在两个或多个地方发现一些相似的代码的时候, 我们需要把他们的共性抽象出来,形成一个唯一的新方法,并且改变现有的代码, 让他们以一些合适的参数调用这个新的方法。
DRY 这一法则可能是编程界中最通用的法则了。 目前为止,应该没有哪个程序员对这一法则存有异议。 但是,我们却能发现,一些程序在编写单元测试时忘记了这一法则: 让我们想象一下,当你改变一个类的若干接口,如果你没有使用DRY, 那么,那些通过调用一系例类的接口的unit test的程序,都需要被手动的更改。
比如:如果你的unit test的诸多test cases中没有使用一个标准共有的构造类的方法, 而是每个test case自己去构造类的实例,那么, 当类的构造函数被改变时,你需要修改多少个test cases啊。 这就是不使用DRY法则所带来的恶果。
2.短小的方法
至少,我们有下面三个不错的理由要求程序员们写下短小的方法。
-
代码会变得更容易阅读。
-
代码会变得更容易重用(短方法可以减少代码间的耦合程度)
-
代码会变得更容易测试。
3.良好的命名规范
使用不错的统一的命名规范可以让你的程序变得更容易阅读和维护, 当一个类,一个函数,一个变量的名字达到了那种可以“望文生义”的境界时, 我们就可以少一些文档,少一些沟通。
4.赋予每个类正确的职责
一个类,一个职责,这类规则可以参考一下类的SOLID 法则。 但我们这里强调的不是一种单一的职责,而是一个正确的职责。 如果你有一个类叫Customer,我们就不应该让这个类有sales的方法, 我们只能让这个类有和Customer有最直接关系的方法。
5.把代码组织起来
把代码组织起来有两组层次。
物理层组织:无论你使用什么样的目录,包(package)或命名空间(namespace)等的结构, 你需要把你的类用一种标准的方法组织起来,这样可以方便查找。 这是一种物理性质的代码组织。
逻辑层组织: 所谓逻辑层,主要是说,我们如果把两个不同功能的类或方法通过某种规范联系和组织起来。 这里主要关注的是程序模块间的接口。 这就是我们经常见到的程序模块的架构。
6.创建大量的单元测试
单元测试是最接近BUG的地方,也是修改BUG成本最低的地方,同样也是决定整个软件质量好坏的地方。所以,只要有可能,你就应该写更多的,更好的单元测试案例,这样当你未来有相应代码改变的时候,你可以很简单的知道代码的改变是否影响了其它单元。
7.经常重构你的代码
软件开发是一种持续的发现的过程,从而让你的代码可以跟上最新的实际需求的变化。 所以,我们要经常重构自己的代码来跟上这样的变化。 当然,重构是有风险的,并不是所有的重构都是成功的,也不是我们随时都可以重构代码。
下面是两个重构代码的先要条件,以避免让你引入更多的BUG,或是把本来就烂的代码变得更烂。
有大量的单元测试来测试。正如前面所说,重构需要用大量的单元测试来做保障和测试。
每次重构都不要大,用点点滴滴的小的重构来代替那种大型的重构。 有太多的时候,当我们一开始计划重构2000行代码,而在3个小时后, 我们就放弃这个计划并把代码恢复到原始的版本。 所以,我们推荐的是,重构最好是从点点滴滴积累起来的。
8.程序注释是邪恶的
这一条一定是充满争议的,大多数程序员都认为程序注释是非常好的, 是的,没错,程序注释在理论上是非常不错的。
但是,在实际过程中,程序员们写出来的注释却是很糟糕的, 从而导致了程序注释成为了一切邪恶的化身,也导致了我们在阅读程序时, 大多数时候,我们都不读注释而直接读代码。
所以,在这里,我们并不是鼓励不写注释,而是——如果你的注释写得不够好的话, 那么,你还不如把更重要的时间花在重构一下你的代码,让你的代码更加易读, 更加清楚,这会比注释更好。
9.注重接口,而不是实现
这是一个最经典的规则了。
接口注重的是——“What”,是抽象,实现注重的是——“How”,是细节。 接口相当于一种合同契约,而实际的细节相当于对这种合同契约的一种运作和实现。 运作是可以很灵活的,而合同契约则需要是相对需要稳定和不变的。
如果,一个接口没有设计好,而需要经常性的变化的话,那我们可以试想一下,这带来的后果, 这绝对会是一件成本很大的事情。
所以,在软件开发和调试中,接口是重中之重,而不是实现。 然而我们的程序员总是注重于实现细节,所以他们局部的代码写的非常不错, 但软件整体却设计得相对较差。 这点需要我们多多注意。
10.代码审查机制
所有人都会出错,一个人出错的概率是很大的,两个人出错的概率就会小一些, 人多一些,出错的概率就会越来越小。
因为,人多了,就能够从不同的角度看待一个事情,虽然这样可能导致无效率的争论, 但比起软件产品release后出现问题的维护成本,这点成本算是相当值得的。
所以,这就是我们需要让不同的人来review代码,代码审查机制不但是一种发现问题的最有效的机制, 同时也是一种可以知识共享的机制。
当然,对于Code Review来说,下面有几个基本原则:
审查者的能力一定要大于或等于代码作者的能力, 不然,代码审查就成了一种对新手的training。
而且,为了让审查者真正负责起来,而不是在敷衍审查工作, 我们需要让审查者对审查过的代码负主要责任,而不是代码的作者。
另外,好的代码审查应该不是当代码完成的时候, 而是在代码编写的过程中,不断地迭代代码审查。 好的实践,无论代码是否完成,代码审核需要几天一次地不断地进行。
from : http://justjavac.com/other/2012/04/13/how-to-build-quality-code.html
相关推荐
本文将围绕“JAVA优质代码编写的30条可行建议”的主题进行展开,详细介绍每一条建议背后的意义及其如何帮助开发者提高代码质量。 ### 1. 命名规范 - **变量命名**:采用有意义的名称,如`studentName`而非`sName`。...
"应用C++技术构建优质软件"这个主题深入探讨了如何利用C++的优势来创建高质量的软件产品。以下是关于这个主题的一些关键知识点: 1. **面向对象编程**:C++是面向对象的,它支持类、对象、封装、继承和多态等概念。...
《应用C++技术构建优质软件》是一本专为软件开发者设计的指南,旨在通过C++这一强大编程语言,教导读者如何构建高效、可靠且可维护的软件系统。这本书由国外专家编写,却在中文社区中相对鲜为人知,可能是由于C++的...
在构建优质软件的过程中,C++语言凭借其高效性、灵活性和强大的功能,成为了许多开发者的选择。C++是一种静态类型的、编译式的、通用的、大小写敏感的、不仅支持过程化编程,也支持面向对象编程的程序设计语言。这篇...
- `仿豆瓣电影-demo.rar` 提供了电影信息查询和评分功能的小程序代码,有助于开发者了解如何整合外部数据源,构建影视类应用。 这些资源提供了丰富的学习材料,开发者可以通过分析和研究这些代码,掌握微信小程序...
C#办公自动化系统是一种利用微软的C#编程语言开发的软件应用,主要用于提高企事业单位的日常办公效率。...通过深入学习和理解这些源代码,开发者可以提升自己的C#编程技能,同时了解如何构建复杂的业务系统。
即时通讯源代码是指用于构建此类应用程序的编程代码,通常包括服务器端和客户端两部分。 在即时通讯系统中,服务器端扮演着核心角色,负责处理用户的登录、注销、消息传递、好友管理等功能。它需要处理大量的并发...
这本书可能是由InfoQ出版的一份精选集,其中包含了多位专家对于优质代码的洞察和实践经验。博文链接(https://grit.iteye.com/blog/255125)虽然没有提供具体的细节,但通常这样的链接可能会指向作者或相关讨论,为...
《奇迹GAMESERVER源代码》是一份用于构建和管理网络游戏服务器的重要资源,尤其对于那些对“奇迹”游戏系列有深入研究或开发需求的开发者来说,它具有极高的价值。源代码是软件开发的基础,它揭示了游戏服务器运行的...
- **`<table>`**: 表格标签,用于构建表格结构。 - **`<tbody>`**: 表格体的容器,包含一个或多个行。 - **`<tr>`**: 表格中的行。 - **`<td>`**: 表格中的单元格。 此外,我们还可以看到`<bgsound>`标签,这是一个...
优质的代码通常遵循一定的命名规范,使得变量、函数和类的名称能够自解释。此外,良好的注释也是理解代码的关键,它们能提供上下文信息,解释代码的意图和实现方式。 3. **数据结构与算法**: 在阅读代码时,需要...
学习与项目开发:可以用作毕设、课设、作业和竞赛项目的开发基础,可以使用这些源码作为项目开发的基础,快速构建出具有竞争力的作品。 【互动与交流】: 资料鼓励下载和使用这些资源,并欢迎学习者进行沟通交流、...
python实现通义千问VLLM推理部署项目源码(优质项目).zip本项目代码经过严格调试,确保可以运行!放心下载使用。可作为期末课程设计、课程大作业、毕业设计等。具有较高的学习借鉴价值! python实现通义千问VLLM...
在IT行业中,源代码是构建和理解任何软件系统的基础,包括网页和网站。"真正的微软网站源代码...通过深入研究这些源代码,开发者可以提升自己的技能,并将这些实践经验应用到自己的项目中,创造出更加优质的Web产品。
《构建高性能可扩展ASP.NET网站》是一本专为ASP.NET开发者设计的技术书籍,旨在帮助他们提升网站性能并实现可...通过学习和实践,你可以将ASP.NET网站提升到一个新的层次,满足更多用户的需求,提供更优质的在线体验。
通过编写测试用例先于实际代码,可以确保代码功能的正确性,而CI/CD则能自动化构建、测试和部署流程,提高开发效率,减少人为错误。 最后,团队协作和版本控制也是苏宁规范的一部分。使用Git进行版本控制,遵循提交...