posts - 82, comments - 269, trackbacks - 0, articles - 1
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

从JAVA里面的不一致性,浅谈设计问题

Posted on 2006-11-20 21:50 itspy 阅读(2291) 评论(10)  编辑  收藏 所属分类: 设计模式JAVA技术

   在JAVA里面,有如下几个不一致的地方
   得到数组的大小,要通过length属性
   得到String的大小,要用length方法
   得到集合(比如List,Set)的大小,要使用size方法。

   反正我是记忆这些有好多次了,结果刚才写这篇Blog时,还要去查文档,要不然写错了被人骂就亏大了。当然JAVA类库这样设计也许有它的道理,但我想从使用的角度来想,也许把这三个统一(只使用一种)起来会更好。


   我说的这个不一致性,我想也许有些人不认同,所以一直放在心里没有说明。但今天我发现有一位大师和我的想法一样,于是腰杆子变硬了,于是写了这个Blog给大家分享。


   这位大师就是《Effective C++》的作者,他在这本书中也得到了,STL在这方面就做的特别一致。(不好意思,拉个虎皮做大衣了^__^)


   说到这我又想起以前一个同学做的一个软件,它设计了一个类似资源管理器的软件,使用树状结构来管理一些资源。在给我看的时候,我发现我添加一些节点时,老是弹出这样的错误提示:“这是树的根,一个树只有一个根”。我才发现他把开发中的思维带入了,程序设计与开发中,没有从使用者的角度来想。

   没错,一个树是只有一个根,你的软件也许是要使用树结构来管理才方便,但是你如果考虑到使用者的感受你就不会出现这样的错误提示了。我当时就向他提议:比如可以这样,如果你把根隐藏起来,不让使用者看到,这样你不就可以使用树的结构,但是使用者在使用时就没有这样的限制。

   看看Windows的资源管理器,我们平时也知道他的设计是一个树,但是没有人留意到,它是一个严格的树吗?你一直往上走的时候,最终的结点是桌面,他明显不是树的根,而只是树上的一个支结点。这样的设计太符合我们的使用习惯,以至于我们平时都忽略了它,对它熟视无睹。

   反正我是认识,就向实践是检验真理的唯一标准一样。一好好的设计的检验就要看,这个设计的最终使用者的体验来检验。上面的那个JAVA的不一致性,如果大多数JAVA语言开发者都遇到了我这样的问题,那么这个设计肯定是有它的不足的了。



评论

# re: 从JAVA里面的不一致性,浅谈设计问题  回复  更多评论   

2006-11-21 08:46 by 温少的日志
Scott Meyers是大师啊,笑死人了。

似乎只有他自己认为是C++领域权威吧,而他实际只是一个技术讲师而已。

# re: 从JAVA里面的不一致性,浅谈设计问题  回复  更多评论   

2006-11-21 09:36 by Samuel Cai
你举的例子不对,String就应该是得到长度(length),集合是得到大小(size),如果集合也用length的话,那才是怪呢。

# re: 从JAVA里面的不一致性,浅谈设计问题  回复  更多评论   

2006-11-21 12:47 by itspy
@温少的日志

Scott Meyers是大师啊,笑死人了。

不好意思,在我心目中它是大师,我想肯定很多人也是这样认为的。当然是在C++领域。


@Samuel Cai
String就应该是得到长度(length),集合是得到大小(size),
如果都用大小不是也行吗?这样更容易记忆一些。

有一个侧面可以反应这个问题,经常在考试时就有题目考这个:数组如何得到它的大小,集合又如何得到,String又如何得到。
为什么会有这些考题?说明有人会搞错,如果人人都知道,也就不会考了。如果都用一个统一的标准来取得的话,大家就不会搞错了。比如都用size()方法,这样也能说过去。

# re: 从JAVA里面的不一致性,浅谈设计问题  回复  更多评论   

2006-11-23 11:05 by leo[匿名]
length是属性

size()是方法啊..这个不能算设计不一致吧.

# re: 从JAVA里面的不一致性,浅谈设计问题  回复  更多评论   

2006-11-23 13:48 by itspy
楼上的可能没明白我的意思。

如果都用属性,或者都用方法这样不是更容易使用吗?

# re: 从JAVA里面的不一致性,浅谈设计问题  回复  更多评论   

2006-11-23 16:41 by BeanSoft
对对, 整天嚷嚷易用性, 我看 Java 整体趋势就是越来越难用了.

# re: 从JAVA里面的不一致性,浅谈设计问题  回复  更多评论   

2006-12-05 09:49 by itVincent
String就应该是得到长度(length),集合是得到大小(size),一个属性一个方法,使用上会有不同,含义也有不同,我觉得不需要一样,就算要改,而这个极其影响兼容性的问题也不好说,最多加一个方法,原来的还是会保留的

# re: 从JAVA里面的不一致性,浅谈设计问题  回复  更多评论   

2007-02-06 10:49 by itspy
并且Java与JavaScript也不一样。

在这两种语言里面对数组与String取长度的方法分别为:
JAVA
数组 array.length array.length
String array.length() array.length

JAVAScript
数组 array.length
String array.length

反正我是每次在JAVA里面对数组,String,List之类的东西取长度时,都要心里一慌,要查文档。每次当时都是记住了,事后过几天就又忘记了。

# re: 从JAVA里面的不一致性,浅谈设计问题  回复  更多评论   

2007-03-23 17:24 by yuri
这几个确实很难分,尤其是length属性与length方法,每次用的时候都要查一遍确保没用错

# re: 从JAVA里面的不一致性,浅谈设计问题  回复  更多评论   

2007-04-08 13:13 by dennis
现代IDE工具的帮助下,不可能再写错这样的代码吧。另外,如果有公司对新手考这样的题目还可以接受,如果招中高级职位还考这样的题目,立马可以走人,这样的公司不进也罢。谈到API设计,我认为ruby是设计的最好的,通过别名的方式,你在ruby中可以用size也可以用length,两者其实是一个方法,一个是另一个别名。

只有注册用户登录后才能发表评论。


网站导航: