|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
最小立异原则
& Z/ v: o! m* H( [6 l+ v8 W) t4 B% a5 C) X# S' z& z; Z2 S
7 \1 w6 n* j! Q
如有可能,尽量允许用户将接口功能委派为熟悉的程序来完成
. r& z5 t7 ]9 D% S: } 不能委派时,那就效仿 7 o7 e! b$ c$ \2 T
1 n: @) I/ V* `3 `0 d( Y
接口设计评估( W( ?9 W- s y2 Q
5 [5 Z. h" H8 L
/ c' V- f8 o, a 简洁: 一个事务处理需要的动作时间及复杂度需要较低的上限
. Z t- x' G* `3 e8 U2 O7 P( I* p1 O 表现力: 接口可以触发相当广泛的行为4 E7 w0 ^( `5 {1 ]5 I
易用: 易用性同要求用户需要记忆的东西成反比
2 k) G$ ^9 b5 V. k) ] 透明: 用户在使用接口的时候,几乎没有什么问题、数据或程序的相关状态需要记忆
4 l/ h2 P7 F2 u: ?4 r0 l 脚本化能力:很容易被其他程序调用5 I J' Q1 o" \5 B" A# m1 K
; v2 _ A7 _/ {/ W
6 a/ z: m5 W+ L; O/ g) `% g+ A+ _
CLI和可视接口之间权衡
3 s8 O% F6 I2 M
/ F+ C# v' u- s+ J: ?
; g5 ~0 Q/ F- y: F CLI:丰富的表现力,高度的脚本化能力,易用性低(需要费劲的记忆),透明度通常也较低
& U9 S1 n& u, d
! O% U2 w, V2 ^6 D& O3 C1 c0 x! Q1 A b2 c# I5 a8 D% i$ y
GUI:易用,不能脚本化,处理规模大的问题需要机械性重复操作9 L/ B9 X" ~& [# r1 z
' t8 h/ V3 g9 f5 {9 X! g; _
0 ^, ]& s2 C7 {* C' D4 l, w 长远来看,为了既能服务一般用户,又能服务有经验用户,最好两种接口都提供。0 O" W! \2 c& j# e* N
! G9 E" i! p5 n* f! A. H7 P6 L& w! q, X( W. g
Unix接口设计模式
& @( t- A2 B/ G5 P, l" M7 ?2 ~9 U7 @9 k; f4 Y/ D6 p! u
5 B; ^' p2 G5 H3 U
1. 过滤器模式- u# Q! {( w. T+ U
6 t; w9 K/ C* t6 t" d
" F! L* S8 g1 p' S* Y C% d" m8 l3 o
程序接受标准输入,转换为某种格式后,再输出到标准输出。过滤器是非交互的。" j0 P$ z( s$ S! t" q2 ?1 K# j
' ^5 I! ~ X8 T( o. r& }8 v3 u1 G
1 u6 t% n1 P1 I F, \
实例:grep,tr
$ `" ~& l$ ]9 @$ F2 k0 V( V/ _
6 y& D0 q @/ O9 n* p; v+ I- L+ i+ _2 ~/ j
原则:Postel原则,宽进严出;过滤的时候,不需要的信息也绝不丢弃;不增加无用数据。3 m$ O' X/ }% `+ S
u# n5 f- Y5 j# N. w
0 t$ `( l) N% j* f) Y( t
2. Cantrip模式
8 `$ b; ]! p* D; d8 ]. |3 d7 E4 Z5 M
& `+ M, v3 ^+ `/ {+ `程序没有输入,没有输出,只被调用一次,产生退出状态码。程序的行为只由启动条件来控制。
8 V3 k* ?* e5 M& i# Q7 a& U
6 L( Z: y5 D- n1 N5 f
6 @- }2 q) G: X1 x实例:clear,touch
# a r# w$ T- S9 U* o8 C2 _* X/ E+ H. C& }6 }% f8 b4 l
2 B' v2 ^8 G' M: ?' |0 j8 r( k% }
3. 源模式 Q8 k+ D/ f/ G' T: X$ J
2 U9 e$ q2 a, t# j% G
, P" B+ w# d- N4 r0 C! U* z1 Z
程序不需要输入,输出由启动条件决定
$ @6 V/ ?1 R! v
0 g; F$ }. {- {3 Y9 l( A- x8 o0 S" C) i2 i. L! M, x
实例:ls,ps,who
. Y" B# h* K% Z8 r1 C7 h3 ~8 g, ^; u$ T7 F% E! W# _9 {
/ {2 Q" @7 G6 _2 W( w. p4. 接收器模式2 z, a& s. u8 n. ]) I
9 z8 v- s# h: i- c9 u
" H1 l! D7 Q/ A8 c7 Y程序只接纳标准输入,而不产生标准输出。对输入的行为由启动条件决定。
5 U2 G: `7 }; q% _: F | i" m, i, D( F) _8 ~
?: Y8 B0 F! _) y3 M8 o实例:lpr
$ w) W# X m. b! \! h5 O* ]2 \0 H3 G" q E$ S8 b
; ]0 C, {6 e* r$ D; Z6 Z$ A8 Z5. 编译器模式
9 k3 q! a% u2 ?5 a
7 Y+ p. r, k# N* c8 }* T+ _+ A2 D) Y4 ~6 Q7 v8 V8 @; f
程序既没有标准输入,也没有标准输出,但是会将错误发到标准错误端。
3 w; q6 Q- L6 V9 m0 M! t; X1 |' Z1 }4 m! {
" Z5 A# P+ h0 D& Q* N
实例:gcc,gif2png,gzip4 h% G- s5 i5 A& D# C" x
% u# f/ ~3 f# k. Q# S' b# c# T: o, b8 r3 w; o% [2 B
6. ed模式
& ^- s/ i% p% h3 J( n* x2 r# o. G# x7 [* t6 M5 Z
! P# y5 K5 X9 C; l: s
程序具有很强的交互性。
! ^' q& L9 h' ~" C E: Z3 ?4 X" C6 j& u& l
0 r3 g I {2 f6 L! e+ F4 i
实例:gdb,ftp,sh. e6 J! }$ f2 a; o, i2 ~
- P- {7 @* R# h8 {* G& ~( x! w( k1 |4 a( W5 H' c/ c4 Y1 f( g
7. Roguelike模式
6 K" E9 h* }* {- o6 Y. S7 t# ]4 s
O, \/ R8 m: B0 G6 h2 U* Y
运行在控制台的全屏、可视界面风格,但使用字符阵列显示,而非图形和鼠标界面。: m1 P G& Y; O
6 }3 W2 M/ ?. h9 c# C
" ?/ q; H# C. N7 u实例:vim,emacs
0 {0 @0 [7 X& C# N6 b
8 G; {' d. x1 W# V8 W7 }% ]" d
; E6 L7 Z& S( m; i* Q. o2 o8. 引擎和接口分离模式
t% V+ k+ m% a# Q
6 x; E1 u: p2 x# w
$ T0 H& a5 I4 Z, v模型、视图、控制器模式( O8 @" a3 G' ? L, [
; x5 V6 A0 A1 K$ O
: `1 |; e2 f8 D! ?( m. ~) I, g0 K几个变种:配置者/执行者组合(fetchmail/fetchmailconf),假脱机/守护进程组合(at/atd, lpr/lpd),驱动/引擎组合,客户端/服务器组合
" ]% R7 \5 h4 K' Q* f) L+ O6 W2 f9 j
- E9 G/ S" B0 Y
9. CLI服务器模式
; H' e5 i$ T4 r! Z- O) s: I: R) b) S& i3 R
% l9 q- t" n! q( A$ ] A' i7 u程序以前端模式出发时,有一个简单的CLI界面读取标准输入并写标准输出;以后台方式运行时,将stdin和stdout连接到专门的TCP/IP端口。8 [1 l$ G& {1 o/ S
6 ~9 ?3 g) ]8 G8 T8 U( B
+ r8 Z0 w) u7 ^实例:POP, IMAP, SMTP, HTTP
. G' D6 F) o3 V1 M2 q6 K( A* D: ?5 Y/ W+ _9 k
0 }. \' ~+ K6 K0 k9 g3 Y9 x10. 基于语言的接口模式
$ e: {9 l+ \% Q9 V' s" y5 Q, s: n8 Y5 F. D
' C6 m( j, l0 R$ @# d
GUI前端同CLI微型语言后端结合,程序往往拥有一个的内嵌脚本语言。
8 U) _* t/ h- l/ n z8 i4 e8 H) H, S4 n& g% F
1 W0 K$ G2 | o$ W. x+ Z3 A
( x) k2 W' s# q; K6 |: I7 w; E! L
7 C4 e n" x: X" P( [2 J% A网页浏览器作为通用前端6 P8 |" |! k! S' k) c
# S4 t- B$ G" Y4 m3 \! }9 y. Y
9 v4 s8 Y$ O: }
$ F$ P: U9 Z Z& \ r. O6 B
8 ^/ C( G, N8 u- E/ O q沉默是金:喋喋不休的程序往往不能跟其他程序很好的合作,用户屏幕的纵向空间是宝贵的,垃圾信息对用户带宽的无谓消耗。,! [+ j! B6 P0 x1 M+ C
; D8 u) s8 V$ o; Y0 `6 Z2 Z
, g5 Z5 T) N O( N长时间的操作要提供进度条。
# P9 {) z# W% w: U$ r2 `
) B3 w k' z) g* H- U* n! r |
|