最小立异原则

     如有可能,尽量允许用户将接口功能委派为熟悉的程序来完成

     不能委派时,那就效仿


接口设计评估

     简洁:          一个事务处理需要的动作时间及复杂度需要较低的上限
     表现力:       接口可以触发相当广泛的行为
     易用:          易用性同要求用户需要记忆的东西成反比
     透明:          用户在使用接口的时候,几乎没有什么问题、数据或程序的相关状态需要记忆
     脚本化能力:很容易被其他程序调用

CLI和可视接口之间权衡

     CLI:丰富的表现力,高度的脚本化能力,易用性低(需要费劲的记忆),透明度通常也较低

     GUI:易用,不能脚本化,处理规模大的问题需要机械性重复操作

     长远来看,为了既能服务一般用户,又能服务有经验用户,最好两种接口都提供。

Unix接口设计模式

1. 过滤器模式

程序接受标准输入,转换为某种格式后,再输出到标准输出。过滤器是非交互的。

实例:grep,tr

原则:Postel原则,宽进严出;过滤的时候,不需要的信息也绝不丢弃;不增加无用数据。

2. Cantrip模式

程序没有输入,没有输出,只被调用一次,产生退出状态码。程序的行为只由启动条件来控制。

实例:clear,touch

3. 源模式

程序不需要输入,输出由启动条件决定

实例:ls,ps,who

4. 接收器模式

程序只接纳标准输入,而不产生标准输出。对输入的行为由启动条件决定。

实例:lpr

5. 编译器模式

程序既没有标准输入,也没有标准输出,但是会将错误发到标准错误端。

实例:gcc,gif2png,gzip

6. ed模式

程序具有很强的交互性。

实例:gdb,ftp,sh

7. Roguelike模式

运行在控制台的全屏、可视界面风格,但使用字符阵列显示,而非图形和鼠标界面。

实例:vim,emacs

8. 引擎和接口分离模式

模型、视图、控制器模式

几个变种:配置者/执行者组合(fetchmail/fetchmailconf),假脱机/守护进程组合(at/atd, lpr/lpd),驱动/引擎组合,客户端/服务器组合

9. CLI服务器模式

程序以前端模式出发时,有一个简单的CLI界面读取标准输入并写标准输出;以后台方式运行时,将stdin和stdout连接到专门的TCP/IP端口。

实例:POP, IMAP, SMTP, HTTP

10. 基于语言的接口模式

GUI前端同CLI微型语言后端结合,程序往往拥有一个的内嵌脚本语言。


网页浏览器作为通用前端


沉默是金:喋喋不休的程序往往不能跟其他程序很好的合作,用户屏幕的纵向空间是宝贵的,垃圾信息对用户带宽的无谓消耗。,

长时间的操作要提供进度条。