Monthly Archives: June 2012

代码命名最佳实践:类品用英文简称,包名用英文全称

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

终于找到术语了:划分标准要同一

如果Person类有4个子类,分别是man, woman, old, young, 那肯定是不对的。因为man也可能是old(老男人),这种建模法会导致含混或者冗余的业务逻辑。

但是,这种错误应该怎么用简练的语言来称呼? 我一直在想这个问题,今天找了一下,终于找到了: 在逻辑学中,这叫 “
划分标准不同一” — "man/woman/old/young"是单次划分,但同时使用了sex和age这两个标准,这是不对的。

它产生的症状,可以称为“
子项相容”,即man中也有old, old中也有man.

早该用个人云存储服务了

以前只知道用“云应用”,也就是SaaS,比如在线画图、作笔记什么的。

现在想想,在线画图、在线笔记的功能再强,也强不过xmind, edraw, word之类的本地工具。

何不换一种思维,利用本地软件在本地弄好,然后传到云上去?

当然,“上传到云”的动作应该非常简练、甚至让人感觉不到才行。

网上搜了一下,dropbox这方面口碑最好,但它已经被禁了。所以我找了一个替代品:金山快盘;感觉还不错。其它的替代品据说有华为网盘、微盘、酷盘之类的。

收集一些关于eclipse code template的资料

通过eclipse code template生成代码,可以提高开发效率,并且降低重复键入代码的不幸福感

这里收集一些资料,介绍这个东西,以及常用的模板

http://eclipse.dzone.com/news/effective-eclipse-dont-write-c

http://eclipse.dzone.com/news/visual-guide-templates-eclipse

http://eclipse.dzone.com/news/effective-eclipse-custom-templ

http://stackoverflow.com/questions/1028858/useful-eclipse-java-code-templates

http://www.sproutee.com/mytemplates.xml