干程序员这行,一个很常见的工作就是需要给程序中的变量、方法、类命名,那么如何合理的取名字就是一个非常有意思和挑战的事情。通常来说,不好定义变量有以下几种风格。
1. 无含义型
示例: int a = 10; 谁也不知道a是啥。
2.超长型
示例:findByIdAndTypeWithoutStatus(id,type);
这个启示是过度的语义化了,粒度太细。
3.语言混合型
就是中英文混合,或是单纯的拼音
示例根据用户ID查找用户的学历 :findXueli(userId);
4.含非英文字符型
hive_metastoreConstants ,hive 中的一个类的命名,可以看出hive这样的开源框架也不是非常的严谨。
那么好的命名规范可见:http://legendmohe.net/2014/04/15/%E8%AF%9115%E6%9D%A1%E5%8F%98%E9%87%8F%E6%96%B9%E6%B3%95%E5%91%BD%E5%90%8D%E7%9A%84%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5/
Hadoop的命名规律
这里主要提下Hadoop框架中比较常见的命名方式,非常值得借鉴。
Service : 这个应该是最常用的一个命名,各种服务都是可以用这个来搞定,例如:hadoop所有有生命周期的对象都实现了Service接口,常见的有MRClientService,AuxiliaryService,ResourceTrackerService,NMStateStoreService等等
Manager : 这个也是非常常见的,例如Hadoop的中的 ActiveUsersManager,AdminACLsManager,通常这类都是带状态的管理类
Admin : 同Manager类似,不知道为什么hadoop中通过两种命名方式,常见的有:CacheAdmin,DFSAdmin,HdfsAdmin,StoragePolicyAdmin等。
Context : 这个一般是各种常见的下的会话,上下文,例如:AppContext,CallerContext,ContainerContext
Factory : 因为hadoop中大量的使用了工厂设计模式,所有就有大量的工厂类:BlockReaderFactory,BlockReaderFactory,ContextFactory,CompressionCodecFactory等。
Provider : 这个也是比较常见的在hadoop中,一般是用于外部资源,或是配置的提供,例如:AccessTokenProvider,ConfigurationProvider,PolicyProvider等。
Exception :这个就毋庸置疑了,对于自定义的异常命名,例如:ApplicationAttemptNotFoundException,YarnException,YarnRuntimeException等
Helper : 一般是辅助类,偏工具,一般是带点业务逻辑的。例如:Log4jPropertyHelper,AdminHelper,DatanodeJspHelper等
Utils : 主要是工具类,无业务含义的,例如LogAggregationUtils,BuilderUtils,YarnServerBuilderUtils等
Client : 通常是两个节点通信的客户端类,例如:AHSClient,DFSClient,HAUtilClient,JobQueueClient,YarnClient等
Store : 主要是存储,例如:BackupStore,FileSystemRMStateStore,LeveldbRMStateStore等
Event : 消息通知时间,例如:CMgrCompletedAppsEvent,AppendEvent,CreateEvent,NodeManagerEvent等。
Handler : 消息或是事件的处理类,例如:CommitterEventHandler,ForwardingEventHandler,LogHandler 等
Metrics : 一般是监控指标,例如:CleanerMetrics,ClusterMetrics,CSQueueMetrics等
基本上以上的命名可以覆盖hadoop 80%的类命名了。