Martin Fowler's Bliki 中文版

记录Martin Fowler关于软件开发想法片断的blog与wiki的交叉体

翻译 最小接口收藏


原文:MinimalInterface    设计            Bliki 索引

所谓最小接口,其设计风格与人本接口形成鲜明对照,它背后的主旨是设计一套API不仅能满足用户完成所有操作的需求,还要把这种能力积聚到一个最精简的方法集合上。(两者的区别请参考人本接口里的例子。)

人本接口里的例子“Ruby-Array VS Java-List”来说,既然List已经有了取索引位置处元素的方法,又能获得链表的长度,那就没必要再加上first和last方法了—— first和last的效果用已有接口就能实现,因此它们属于便利方法(convenience methods),不过,推崇最小接口的设计者对便利方法也并非一概避免,只是一个便利方法要想跻身为最小接口的一员需要先跳过一个很高的标杆。

我们已经讨论过人本接口了,下面说一下最小接口的基本原则。

学习接口怎么用是要花时间的,如果一个class接口很庞大,用户可能对它的第一印象就不是很好,想用好它没准就很不容易了。如果能保持接口被限制在一个窄小而聚焦的方法集合上,那么用户要了解这是个什么class、它有哪些功能就相对容易了。

聚焦”对class设计者也很重要。设计class时的一个常见问题就是让一个class做太多事情。把注意力集中在最基本的操作上能帮助class避免赘肉缠身,让它专心做一件事并把这件事情做好。

如果选择人本方案,一个方法只要可能被某人用到,你就会把它添上,这样不断添加方法,最后多得没完没了,何处是个头儿呢?因此,为了避免方法爆炸,必需得有个指导原则。如果把“有用的就是需要的”作为设计人本接口的指导原则,确定什么是“有用的”本来就见仁见智,很难说清。而最小接口的原则就简单多了——如果一个操作用已经有的方法能完成,那么就无需再新添一个。

(需要注意,找出哪些方法是有用的——这个问题对编写公开发布的类库的人比对编写应用代码的人意义更重大。写应用代码时,因为是限制在一个封闭的系统范围内,你很清楚一个接口有哪些用法。)

如果你用的是静态类型的纯接口(比如Java和C#里的interface关键字),那么保持方法总数较小的另一个原因是为了减轻接口实现的负担。如果不得不实现的方法数量庞大,那可真是不小的工作量。(可以用抽象类(abstract class)以混入(mixin)的方式来减轻这种负担。)

在用一个最小接口class时,如果需要更多功能,你可以借助其他class。例如在Java中你要想翻转一个List或给它排序(这些操作都是Ruby Array的常规方法),可以借助Collections这个工具类。

如果你是在编写一个库,一旦发布,就很难再从中去掉什么东西了。因此,最好是先天不足,后天逐渐丰富,这样要强于先天营养过剩长成胖子,之后想减肥也减不下来

发表于 @ 2006年10月19日 08:03:00|评论(loading...)|编辑

旧一篇: 人本接口

评论

#5555555555555 发表于2006-10-19 16:11:00  IP: 220.184.134.*
正和我意
Martin Fowler深得我之真传也!
#北京猩猩 发表于2006-10-19 18:06:00  IP: 207.46.89.*
我的看法是为类实现一个最小借口(特别是定义interface的时候),然后为他提供一个或多个Helper类来实现常用的方法。

不过这样做的缺点是,把一个对象相关的人物分散到了多个类里。
#skyover 发表于2007-07-02 10:10:21  IP: 61.131.73.*
"如果你是在编写一个库,一旦发布,就很难再从中去掉什么东西了。因此,最好是先天不足,后天逐渐丰富,这样要强于先天营养过剩长成胖子,之后想减肥也减不下来。" 比喻很贴切。哈哈
#selfishman 发表于2007-07-25 13:18:35  IP: 222.130.178.*
期待更多文章
#program_net 发表于2007-08-09 10:15:42  IP: 60.178.244.*
相当的好
#zinking3 发表于2008-03-12 22:25:51  IP: 218.2.216.*
我觉得接口要人本,不是说每个人的判断力不同就不能作出人本接口了,那世界上这么多人,对于美的追求不也是大体一致的嘛?
个人观点
#wangbinjr 发表于2008-06-03 19:28:11  IP: 219.143.130.*
学习
#carry1002 发表于2008-06-27 11:55:39  IP: 211.94.170.*
你好,我是猎头公司carry,我们服务的对象主要是世界500强企业,现在有thougthtworks公司的职位机会,TW是敏捷方法领域的领头羊,有兴趣的朋友请和我联系,我的msn:carry.1@hotmail.com
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © mfowler