***一个名字虽然并不影响程序的运行,但是却对代码的表达力和可读性有着重要的影响。***
有特殊意义却让人第一次见感到奇怪的名字,足以给人留下深刻的印象。
命名的过程本身就是一个抽象和思考的过程,当我们不能找到一个合适名称的时候,往往说明我们对问题的理解还不够透彻,需要重新挖掘问题的本质对问题域进行重新分析和抽象。
**好的命名是写出好代码的基础**。
**代码即文档** 可读性好的代码应该有一定的自明性,不借助注释和文档,代码本身就是显性地表达作者的意图。自明性依赖我们对问题域的理解,以及命名是否合理。
无法想出一个合适的名字时,可以思考:是否一个方法实现太多功能?是否封装的内聚性不够?是否对问题的理解还不够透彻,需要获取更多的信息?
变量名应该时名词,能够正确描述业务,有表达力。
int elaspedTimeInDays;// 表示过去的时间
部分魔法数,应当设置全局变量 ——> 86400:DECONDS_ER_DAY 10: PAGE_SIZE
这样做,使代码具有可搜索性,易于管理。
函数名要具体。体现要做什么,而不是怎么做。
类是一组**数据和操作**的封装。分为实体类和辅助类。
实体类承载了核心业务数据和核心服务业务逻辑,命名要充分体现业务语意。 Customer、Bank、Employee。
辅助类是辅助实体类一起完成业务逻辑的。其命名要能通过后缀来实现功能。
用来为Customer做路由控制的控制类型CustomerController、提供Customer服务的服务类CustomerService、获取数据存储的仓储类CustomerRepository。
包名代表一组有关系的类的集合,起到分类组合和命名空间的作用,应该能反映一组在跟高抽象层次上的联系。如苹果、梨子、橘子应该放到一个水果包中。不能太抽象,也不能太具体。
保持命名的一致性,可以提供代码的可读性,从而简化复杂度,一旦选中,要持续遵循,保证名称始终一致。
使用相同方法名约定
crud/约定
新增/create
添加/add
删除/remove
修改/update
查询(单个)/get
查询(多个)/list
分页查询/page
统计/count
使用对仗词
add/remove
increment/decrement 增长/缩减
open/close
begin/end
insert/delete
show/hide
create/destory
lock/unlock
source/target
first/last
min/max
start/stop
get/set
next/previous
up/down
old/new
限定词后置原则
总额、平均值、最大值(Total、Sum、Average、Max、Min)
总收入、总支出、平均收入、平均支出(revenueTotal、expenseTotal、revenueAverage、expanseAverage)
建议Total表示总数,Id表示序号 避免Num
使用共同语业务语言
可以通过中间变量让你代码变得更子明,每一步的结果添加一个中间变量 ,把代码展开。
在技术人员之间使用设计模式语言,可以极大提升沟通效率。
注释如果是复述代码的功能,往往意味着坏代码,是为了弥补表达能力的不足。
别给糟糕的代码加注释–重新写吧。
如果编程语言有足够表达力,或者我们擅长用代码显性化表达意图,那么也许根本就不需要注释。因此,在写注释时,你应该自省自己是否在表达能力上存在不足,真正的的高手时尽量不写注释。
注释要能够解释代码背后的意图,而不是都功能的简单重复。
//休息2S,等待管理系统处理结果
Time.Sleep(2000)