java代码中包、类的命名一直是很纠结人的东西,也是体现代码能力的一个指标。比如
命名的其中一个纠结点是,
如何在命名中体现当前所处的系统或者业务模块。
1. 不体现。比如交易通知获取服务的请求就叫Service
2. 忠实体现,如NotifyFetchTradeService
3. 以简称方式体现,比如NfTradeService
具体怎么叫,不仅影响代码的可理解性,更重要的是,会影响在IDE里迅速定位这个类的效率
分析:
1.
如果只叫Service,在IDE里查找特定的service时就会比较麻烦。因为以Service开类的类会非常多,如果你习惯把这个模块的服务命名为Service,那你大概也会把另一个模块的服务类也命名为Service.这就导致你每次查找特定的Service时都会看到一个很长的列表,效率受损。
2.
如果叫NotifyFetchTradeService,则不存在命名冲突问题。
但你在IDE里查找时要键入很多字符;更严重的是,由于拼写太长,
你会常常想不起它的全称,正如你想不起来"FIFA"的全称一样
3.
使用简称NfTradeService,则是可以接受的折衷,命名冲突少,也容易记。不过,它仍有一个缺陷,即系统的新手看到NfTradeService类,而类注释又很简略时,则可能不知所云:“什么叫Nf”? 也就是说,
简称降低了可理解性。
补充方案就是,在包名里使用全称,比如 com.mycompany.notify.fetch; notify.fetch对新手来说,会比nf友好的多。
总结:
类在命名时要尽量体现本类所处的业务模块,同时保证这个类在IDE里可被迅速定位。 通过简称类名+全称包名,可以实现这个目标。
p.s. 补充一点:对外的web service或remote service应该叫什么? 建议叫NfwService或NfrService, 其中的w/r代表web/remote