软件开发不同阶段的命名风格
继续分析软件开发过程中的命名事宜。
首先是需求分析,其输出是用户故事,第一要点是形成统一语言/UL,即所有相关者理解都一致。
每个故事都边界都用验证测试/AC 来确定,有种说法是程序员先从练习写 AC 开始,所以建议大家也都试试。
每个 AC 都实现了一定的价值,有明确的输入输出,也是 TDD 的源头/基础。
这个阶段函数>模块,从 AC 里面抽象出函数即可,参数和返回值也尽量抽象成接口,并给予命名。
命名风格一般用大小驼峰,这点上 go 语言的一致性比较好,统一用大驼峰;其它语言函数名可能要用小驼峰,如果影响不是太大,我建议和 go 保持一致,接口和函数都用大驼峰,私有函数用小驼峰。
接下来是概要设计,开始进行模块划分,DDD 里叫识别边界上下文。
其中最难的是识别核心域/核心模块/Core,需要对产品需求和技术实现同时有深入的理解。
为 Core 设计并搭建框架,判断这一步是否做对的一个方法是添加一个功能时要修改几行 Core 代码,比如,如果支持插件,则是 0 行代码。
这个阶段要为模块命名,以及源码文件名,模块名一般和文件名对应,而且文件名受文件系统影响-有的文件系统不区分大小写,所以模块名一般都用小写。
补充,概要设计完成,需要有能运行的框架,并拿用户故事去验证可行。框架在技术上也要能通过评审,然后才能继续下一步。
详细设计时要先完成函数,数据,接口的定义,可以采用代码即文档的方式:javadoc,jsdoc,rustdoc。把详细的说明以注释的方式写在代码里。
这一阶段以定义为主,但代码也能做到编译通过,可以提交。
命名来源于用户故事/AC,风格以大驼峰为主。
数据结构的域值,对象的属性命名,接口内的方法一般使用小驼峰。
具体实现时,要考虑函数可测试性,简单的函数调用没必要测,涉及到计算和复杂逻辑的才需要测。
如果之前定义的函数不利于测试,可抽取其中计算和逻辑的部分为私有函数,对该函数进行测试。
使用测试主要是为了提高效率,单机本地不离开 IDE 就能确保实现完整。
函数内临时变量命名风格使用小驼峰,属性/域前面会添加 this/self 来做区分,辨识度上影响不大;这类语言一般觉得蛇形太丑,所以不采纳。可以接纳蛇形的语言,临时变量用蛇形也可。
版权声明: 本文为 InfoQ 作者【顿晓】的原创文章。
原文链接:【http://xie.infoq.cn/article/686249e05f8041fba8aa46a39】。文章转载请联系作者。
评论