写在最前面,这篇文章敬网上有这方面思考的各位大神。我有这方面困惑的时候,参考了很多前人的思考,再次感谢。此篇文章更像是自己总结的一个备忘笔记
名不正,则言不顺。好的命名,堪比好的算法。甚至有时候一个合适的命名,就能省掉几十行的注释。并且让人印象深刻。当你开始关注命名这个问题时,你可能已经发现其中的秒处了。
在懊恼的选择中,总想寻求一些规则,让自己做事显得不是那么毫无章法。下面就列举一些小章法,仅供参考
一、类名
- 原则
类名:名词或者形容词
操作类以service或者operator结尾
业务模块:使用名词+动词+er/or
不要通篇的helper manager
- 类名描述
不建议采取缩写形式,首字母的缩写,可读性很差。如果说理由的话,我会说微软的.net框架中几乎找不到缩写的形式,你可能会反驳说框架中涉及到的业务比较单一,实际业务中描述清楚一个对象,就需要几个单词,不可避免的会很长,所以才缩写。我只能说,你还没有花心思去找更能表达清楚对象的词汇,即使真的很难找到。我也认为,不应该缩写,即使很长。
- 工具类
util:一般表示通用业务,可在各个系统中移植使用
tool:部分通用的部分业务相关的,因此不能用在其他系统体系中
service:是处理单一业务的,UserService就只处理用户的相关操作。
helper:与其翻译成帮助,不如叫做辅助类,是一些现有功能的封装,为编码过程提供便利。如:SqlHelper
- 业务基类
命名业务类的基类,以base结尾,而不要以base开头
如AAA的基类,命名成AAABase。这样做,一个显著的好处是,有效的利用了编译器的智能提示功能。你想继承某个业务,你大概是知道这个业务 的名字的,通过这个名字就能联想出xxxBase
- 数据库逻辑类
数据库逻辑操作类使用 【名词+Bll】。因为大家都这么写
二、对象
- 静态实例,使用Current还是Default
Current一般表示当前上下唯一,Default表示应用级别唯一的
- 声明变量
如果你还没有养成给花心思给变量取名的习惯,也请不要随便敲几个字符就完事,最起码要写个类名相关的描述
三、属性
- 去掉不必要的限定描述
例如:属性命名
放在类的名字就是Name,不要带着类的修饰词。如Name和SellerName,在Seller类中应该取前者Name,而不是冗余的SellerName
网上有大神总结的一些常用功能类结尾词,转录
功能 | 结尾词 |
获取器/查询器 | Getter Finder Accessor |
修改器/编辑器 | Modifier Updater Adjuster Editor |
发送器/接收器 | Emitter Sender/Receiver Broadcaster/Multicaster |
访问器/迭代器 | Visitor Iterator |
生命周期相关 | Loader Parser Constructor/Maker/Creator/Generator Initializer Register Activator Starter Stopper Destroyer |
事件相关 | Listener Producer/Consumer Observer/Observable Timer |
封装/容纳 | Adapter Wrapper Container Server |
过滤器/拦截器 | Filter Interceptor |
用户角色相关 | Signer Owner User Member Operator Authenticator |
代理类 | Proxy Broker Delegate Gateway |
监控\跟踪\探查器 | Detector Profiler Monitor Tracker Introspector |
多线程相关 | Synchronizer Blocker Holder Worker |
辅助类/工具类 | Helper Supporter Util Utility Kit Tool Toolkit |
创建/生成器 | Maker Creator Generator Constructor Builder Supplier Provider Factory |
选择器/决策器 | Chooser Selector Mediator Arbitrator Decider Allocator Scheduler |
处理器/执行器 | Resolver Processor Handler Executor Performer Runner |
管理/控制器 | Ruler Controller Manager Ordinator Leader Master |
交易 | business deal trade transaction |
用户/客户 | user customer player |
转换器 | Formatter Marshaller/Unmarshaller Encoder/Decoder Transformer Converter Packer/Extractor |
单一功能 | Descriptor Counter Viewer Locator Accumulator Recognizer Scroller Printer Compiler Cleaner Reader/Writer Buffer Collector Connector Scanner Linker Mapper Streamer Enhancer Renderer Painter Weaver Adapter |
结尾:
起个好名字和写个好算法同样重要。不要依赖于注释去做本来命名就可以完成的工作。源码不是草稿纸,源码是工程师的最终成果,需要我们每个从业人员认真对待。
当觉得命名困难的时候,其实是因为还没有想清楚这个变量、这个方法或者这个类是要干什么的,还不能用一个或几个词准确描述它的工作,才觉得无法命名,这是命名的最困难的阶段,烦请诸君逆流而上。
参考: