“首先要给它一个名字,然后你才能描述它。”
@图片:北京的晚霞 @摄影师:刘先生
这个话题源于公司《.NET技术规范》中的一条:
【强制】枚举声明应以Enum结尾
我对此并不认同:
首先,引用一下微软官方文档中,关于枚举命名的建议:
❌ 请勿在枚举类型名称中使用“Enum”后缀。
❌ 请勿在枚举类型名称中使用“Flag”或“Flags”后缀。
❌ 请勿在枚举值名称上使用前缀(例如,“ad”用于 ADO 枚举,“rtf”用于富文本枚举等)。
https://learn.microsoft.com/zh-cn/dotnet/standard/design-guidelines/names-of-classes-structs-and-interfaces
可见,微软技术规范中,并不允许枚举以Enum结尾。
微软技术规范中,同样也规定了某些命名需要有特定的结尾,如Attribute,Exception,Stream,对此小伙伴们是否也感到困惑,如何确定命名是否应以某个词结尾?给代码命名是程序开发中十分重要的工作之一,优秀的开发人员绝不会随意用几个字母去命名自己的代码。
01
—
为什么枚举类型不以Enum结尾
首先,在.NET中,枚举和类、结构体是同一层级的概念,类和结构体都不以Class和Struct结尾,自然枚举也不应该以Enum结尾。
另外,枚举是一个包含特定数据的封闭数据集,供其他类调用,枚举命名是否以Enum结尾都不影响对其含义的理解,加上后缀反倒显得多余。
02
—
哪些类型应该有固定结尾
如果一个功能包含一组相关成员,成员职责明确,相互配合完成功能,那么不同成员应以其在整个功能中的作用,作为命名后缀,以使代码结构清晰,易于理解。比如,领域驱动设计中,我们一般采用MediatR提供的事件式编程模型,其主要组成类包含命令和执行两部分,因此将请求命名为xxxCommand,执行类命名为xxxHandler,代码结构清晰。再比如,我们将Service作为业务逻辑处理类后缀,将Repository作为仓储类的后缀,都是指示其所代表的特定功能。
03
—
总结
命名的基本原则是:“见名知意”。即命名能够恰当的反映其含义,并保持简洁。
我的思考是:
如果表示一个类型,则不需要固定后缀。
如果表示一个功能,则应该以某个特定词做后缀。
代码规范的意义在于,团队中每个人都能很容易地阅读其他人写的代码。在团队开发中,遵循一致的代码规范,能够降低程序维护成本,提高代码可用性,同时规范的制定应结合自己团队的能力,认知及个性化需要。
借用马丁.福勒的一句话:
任何人都可以编写能被机器识别的代码,
优秀的程序员可以编写人类理解的代码。
喜欢的朋友可以点赞,转发,关注