一千个读者,就有一千个哈姆雷特,代码质量也同样如此。
想必每一个对于代码有追求的开发者,对于“高质量”这个词,或多或少都有自己的一丝理解。
当我在长沙.NET技术社区群抛出这个问题时,众说纷纭。有人说注释齐全、可读性高,就是高质量;有人说变量命名、代码层次清晰,就说高质量的代码;有人说那些使用了新特性的代码,很多都是高质量代码;也有人说,高质量的代码是个伪命题,因为他往往要花大量的精力才能精心打磨,有这个时间,产品早就*了。
说到”高质量“代码,就不得不提”整洁代码”。这个概念来源于畅销书《代码整洁之道》(TheCleanCode)中,鲍勃大叔引入了这个整洁代码的概念,他认为
写整洁代码,需要遵循大量的小技巧,贯彻艰苦习得的‘整洁感’”,这种“代码感”就说关键所在。有些人生而有之。有的人费点劲才能得到。它不仅让我们看到代码的优劣,还予我们以借戒规之力化优为列的攻略。
缺乏”代码感”的程序员,看混乱是混乱,无处着手,有“代码感”的程序员,能从混乱中看出其他的可能与变化。“代码感”帮助程序员选出最好的方案,并指导程序员指定修改行动计划,按图索骥。
编写整洁代码的程序员就像艺术家,他能够用一系列变化把一块白板变作由优雅代码构成的系统。
这本书值得摆在每一位程序员的案头。许多热衷于英文原作的读者都会说国人翻译的许多作品都失去了原作的韵味,但这本韩磊老师翻译这本中文版十几年过去了,印刷了许多版了,也能客观证明这本译作的价值。
也许初读这本书,许多作者提到的手法我们无法短时间内认真体会,但许多读过这本书都表示,许多想法在我们写代码的时候突然迸溅而出,使得思路能够更加通达,并达到一种“人码合一”的状态。
”代码感“在我们大部分开发者看来,我们开发的代码,往往无需涉及过于复杂的业务逻辑或底层技术,只需简单的使用一些代码拼凑,即可按时完成我们的任务,也就说所谓的”CRUD业务开发者“。
但业务系统本身也并非全靠所谓的“无代码平台”或“代码生成器”能够自动开发完成,他依然需要开发者用心去设计其中的逻辑、变量、结构、流程,才能更好的运转,尤其是要想让应用系统能够保持长久的生命力,更需要我们能够编写更高质量的代码。
在《代码整洁之道》中,作者将这种编写高质量代码的能力,称为“代码感”,这种感觉有时需要灵光一现,有时又需要花费大量的精力才能完成。
就像在《灌篮高手》中,安西教练让大家培养球感:
两万个球?写两万个类/方法/代码行?确实是一种提高”代码感“的好方法。
但跟投球要掌握方法一样,简单的重复写两万行代码估计很难提高代码质量,依然需要大量刻意练习才能带来质量上的提升。
而如何编写高质量代码,在软件开发领域,也有一些前人总结出来的良好准则,人们将这些准则,总结为“设计原则”。除了设计原则外,还要许多良好的实践模式,人们将它们称为”设计模式“。设计原则就像是内功心法,设计模式,则像招数功夫。
也许我们无法完全遵循这些原则或模式,但能够灵活的运用,总能给代码质量带来提升。
何为高质量代码我个人认为:高质量代码是可读性强、易于测试,它们能够恰如其份的表达业务的需要,并能根据业务需要易于修改的代码。
高质量的代码也许与技术架构、特定API、特定的语言没有太大关系,但高质量代码或许都具备一些相似的特点。
代码结构结构是代码的核心,就像高楼的支架,为整个代码的完整运行奠定基础。好的代码一定结构清晰,让人易于理解,并能快速定位问题、解决问题。
有人说好文章的结构特点便是:”凤头、猪肚、豹尾“,文章的起头要奇句夺目,引人入胜,如同凤头一样俊美精采;文章的主体要言之有物,紧凑而有气势,如同猪肚一样充实丰满;文章的结尾要转出别意,宕开警策,如同豹尾一样雄劲潇洒。代码也许无需追求达到这么高的境界,但遵循一定清晰的代码结构也能达到同样的效果。
结构按照我个人的理解,可能包括以下几种层面:1、项目文件夹命名;2、分层;3、模块命名;4、代码格式。
1、项目文件夹对于复杂项目,打开文件夹和解决方案的第一眼,是清晰还是紊乱,往往就是我们对于项目的第一印象。许多资深研发工程师,都会倾向于用数字来对文件夹进行编号,例如对于复杂项目,我们使用如下命名方式对定义解决方案文件夹,虽然不会花特别多的功夫,但会给开发过程带来许多便利。
当然,由于在VisualStudio中,项目文件夹本身属于sln解决方案文件中定义的层级结构,并不会在资源管理器文件夹中体现,所以有时还需要在资源管理器文件夹中也定义类似的层级结构。
01基础服务02框架服务03应用服务01工作流服务02权限服务03日志服务2、分层
分层式架构大家都习以为常,其中尤其以三层架构(用户表现层,业务逻辑层,数据访问层)已经深入人心,成为许多.NET开发者的普遍认可,而领域驱动设计最常见的则是四层式领域驱动设计(用户界面层,应用层,领域层,基础设施层)。
分层式架构体现了”