最小接口
来源:互联网 发布:dqm2艾斯塔克数据 编辑:程序博客网 时间:2024/06/06 05:59
原文: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这个工具类。
如果你是在编写一个库,一旦发布,就很难再从中去掉什么东西了。因此,最好是先天不足,后天逐渐丰富,这样要强于先天营养过剩长成胖子,之后想减肥也减不下来。
- 最小接口
- 最小接口
- 最小接口
- AT89C51最小系统和RS-232串行接口
- [转贴]带USB接口的短信收发最小系统设计
- 争取使类的接口完整并且最小
- 条款18: 争取使类的接口完整并且最小
- 看了一下Martin Fowler谈的人本接口和最小接口
- Effective C++学习笔记:争取使类的接口完整并且最小
- effective c++ 条款18: 争取使类的接口完整并且最小
- effective C++笔记之条款18:争取使类的接口完整并且最小
- 把数组排成最小的数以及Java中的Comparable接口
- UI组件:暴露最小限度接口,在组件基类中实装共性属性
- TI 蓝牙4.0芯片 cc2540 引脚图 最小系统 下载接口等 小白看过来
- 商城项目实战37:订单系统最小实现接口文档及实现
- 多线程测试接口,可显示多次请求最大时间,最小时间
- 接口
- 接口
- Windows API一日一练(29)SelectObject和DeleteObject函数
- ASP.NET 2.0 中实现模板中的数据绑定系列
- Struts 2.0 解读笔记
- 游标类型产生的数据检索问题
- 台湾微软网站上的Silverlight教学影片
- 最小接口
- J2EE开发中减少编写代码工作量的几种方法
- LCC编译器的源程序分析(65)后端接口的结构注释
- Windows API一日一练(28)CreateFont函数
- Delphi的TWebBrowser编程综述
- asp.net ajax 和 asp.net 2.0中的fileupload合力打造无刷新
- Windows API一日一练(27)SetBkMode函数
- Visual WebGui 基于ajax的界面框架
- LCC编译器的源程序分析(63)创建DAG森林的源程序