|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
最小立异原则7 ~6 M6 c0 }* Z5 \$ B: p3 ?5 R
8 h4 H$ i! _- e9 d; G- ?) \
' l' ^6 }$ \$ c 如有可能,尽量允许用户将接口功能委派为熟悉的程序来完成
3 c& V6 ^5 Z6 N+ l8 |$ O 不能委派时,那就效仿 ( Z" L1 G+ z( `% h
3 u0 y; p' C$ _- Z" C7 ?6 S接口设计评估# ]0 G( J; u& S) l& k# |9 E
; g4 D" S2 e- y( x$ j; P6 j6 @9 c6 d' Z) z/ }2 V7 o, V. X2 J
简洁: 一个事务处理需要的动作时间及复杂度需要较低的上限
' g& F$ S7 V( ^& y$ j6 I3 x) N 表现力: 接口可以触发相当广泛的行为
- ^" A$ ?- f- I8 C7 V5 H; K 易用: 易用性同要求用户需要记忆的东西成反比 W1 F. m8 T* e
透明: 用户在使用接口的时候,几乎没有什么问题、数据或程序的相关状态需要记忆
0 g; K( v" _9 O6 l) } d 脚本化能力:很容易被其他程序调用
3 M- \- @, B N4 E* ?' A' x4 o4 S! x9 e3 [) l: w
; O. L% A4 V6 s0 f5 f, w
CLI和可视接口之间权衡3 A) [, ]0 d- F6 K
$ ^ }" y. q! m
) P+ p* Z' w8 T5 d: C( T: O4 e CLI:丰富的表现力,高度的脚本化能力,易用性低(需要费劲的记忆),透明度通常也较低
, Y/ W/ W& l" ^/ N" G" i. e
! M1 P- Y" I+ ^
( f* B6 r8 C" @+ u1 | GUI:易用,不能脚本化,处理规模大的问题需要机械性重复操作& {) E$ d( A5 g5 U! {7 Q
$ ~3 Y2 k4 e# j' b6 U, ~5 Z8 \8 w
' O7 g8 G9 c5 m# F0 U: J 长远来看,为了既能服务一般用户,又能服务有经验用户,最好两种接口都提供。9 m$ M A) x/ i
& m8 M0 ~1 ~% V$ u5 \ C8 s
. ^0 q0 l5 z8 y( [2 [, V; hUnix接口设计模式4 f3 ]! S6 l4 V& O- |7 N) w
* _) k) K! R& _! m3 O$ v( C6 [
1. 过滤器模式
) O. q! R1 X5 w( ^7 F4 Z& I
) e3 k8 U6 @2 v$ P2 N) \4 w5 g1 }/ D) Q5 Q& e+ m. |
( K4 u8 Z( Z, V1 ^4 k3 }* a, X程序接受标准输入,转换为某种格式后,再输出到标准输出。过滤器是非交互的。
& p/ [# T& T& Z9 E: |' ?
D2 y) C: N2 g* z' B$ e& d$ Q8 K
6 ^+ p1 ~; ?* q* H# E, R) P4 ~! h" n实例:grep,tr
# d" L* a0 d/ g" @* @9 e( V e8 I/ X/ T7 A( w7 ~% U! J8 W
# ]# h2 @ Y; \; ]0 t原则:Postel原则,宽进严出;过滤的时候,不需要的信息也绝不丢弃;不增加无用数据。
$ n; \* O+ O8 R9 @; i5 H
9 ?% K) N. u9 F' d$ k& I1 @& {. S3 M8 w, O% x
2. Cantrip模式, Y2 M* o4 t# _
9 A+ J$ V, p1 B. Q* m/ a6 A! @$ {. T5 C/ Q, i( u
程序没有输入,没有输出,只被调用一次,产生退出状态码。程序的行为只由启动条件来控制。+ C/ |" G5 ]& k* O P
! c1 k6 y9 G7 n1 s. q$ b, }
6 _% |6 Q7 o8 |6 ~2 k& }实例:clear,touch9 H; K. j2 \* ?# }5 E" N
0 d8 B) V/ i* K
& ]. @$ r1 @* a; |% y& S3. 源模式- b6 Z& g1 \9 }, y" `* y
. z& p0 p7 c5 G7 v M& o7 j" @- v* R3 Z4 ?/ B! _* h
程序不需要输入,输出由启动条件决定2 d6 M9 \4 K$ j& g+ g9 T
$ u J$ P7 Y6 I* C" i# ?& J" t( I' Z- r
实例:ls,ps,who& q+ _4 ~; `% N) T9 ~! x1 f
9 l! s6 x a# J5 p- ]
# c5 D( x5 w8 H3 y9 r. W4. 接收器模式
+ E9 S. t) P0 h1 k. w% u* W
9 w6 \2 F, r* k0 B3 N* X6 h4 \" d- L, W' A+ W
程序只接纳标准输入,而不产生标准输出。对输入的行为由启动条件决定。
, v- O6 \" i% n& b+ i1 t. O D( w) y( V6 b: T5 D" X
% O2 B, f2 }% B实例:lpr1 `2 \1 N/ g W
& P X( E. O0 C; T6 m/ ^. _ c) ]. I5 e* N: M, b
5. 编译器模式+ L6 I7 {* i( C3 [. \
9 K7 k* S- T4 t2 c$ w1 f/ ], a9 r
程序既没有标准输入,也没有标准输出,但是会将错误发到标准错误端。7 O% J+ I0 J3 ?0 ]
5 c. ^1 }$ U# R1 e( z, t- y* |* X9 G# H% e2 _9 g) {
实例:gcc,gif2png,gzip/ u. r6 B' _. f9 {! u
- k2 h- J: p8 c. {, F8 t2 C4 \5 A
6. ed模式' [1 o5 o V' q; d9 P
" d; Q- C6 Y/ z, E! `4 n2 T
- m" w/ ?0 b3 a& ]( s: U程序具有很强的交互性。/ i V N* x" d* a" [+ h
5 M; M' o) R" K+ P1 e
. j) b) D1 k" B实例:gdb,ftp,sh
+ ]; q" z [: [! `8 Y1 U4 U- e& }, j. E; V5 C$ P% K
6 z M# ~8 @7 w; R. f
7. Roguelike模式
$ s! j7 l- d" F# P" u D: ~; [: h; k3 m9 t) {
* F) x; z, b% d" u3 B4 K/ f O" h
运行在控制台的全屏、可视界面风格,但使用字符阵列显示,而非图形和鼠标界面。2 C# q. {2 A: P3 j- c! T6 O6 L/ M
5 L5 ^" U6 h6 B: C6 t8 l; L4 R4 S$ f9 X& |9 F' d
实例:vim,emacs, D+ q9 V) W9 x; k1 a5 x% X6 l0 M
$ z7 h+ e8 u1 f: r$ \
2 L# g- X7 d/ Q" ]/ r+ ^9 F8. 引擎和接口分离模式
: L: O! [! m8 q
, I; ]! l& a. `( S c. o) Q1 p' o0 r. q
8 ]2 l+ c% O0 Q模型、视图、控制器模式
( L/ z+ C& r: f9 R/ \
B# P# Y0 v5 n. b( Z9 i9 A3 o
# B- v$ M8 L3 Z- u几个变种:配置者/执行者组合(fetchmail/fetchmailconf),假脱机/守护进程组合(at/atd, lpr/lpd),驱动/引擎组合,客户端/服务器组合
9 I5 o ?' }5 }5 y$ R
7 q9 L: ]0 ~0 {/ B. w3 G
! i% O/ b0 L* k1 Y2 u4 b+ H9. CLI服务器模式% s" D- A) m' U( n* m$ M
) g/ M" |+ Y7 V0 \& j8 z9 j, d$ Y; T3 c' A" p% s: s4 o
程序以前端模式出发时,有一个简单的CLI界面读取标准输入并写标准输出;以后台方式运行时,将stdin和stdout连接到专门的TCP/IP端口。; x+ I/ a K# n9 f0 ?( A; G
% X+ Q, p8 \" f/ C- o2 [ V
4 U" a9 J/ V/ y: I实例:POP, IMAP, SMTP, HTTP1 \ ~5 T" ` n& K& t
2 Z3 _% @- o& V$ x9 O S/ E& `
3 C T$ g: }* J [: \6 h10. 基于语言的接口模式( K) |" V5 o( C7 u( _6 r( {
$ d8 Y. M6 U6 g! g9 R$ ], H, k3 d
8 E& r |7 k. u' e; N6 lGUI前端同CLI微型语言后端结合,程序往往拥有一个的内嵌脚本语言。
7 v0 L5 f d! o1 j! w7 O( z+ N: s z" B+ G' y
\7 \. W2 ~2 b4 D0 f, f. Q% P2 |' L- O
+ |' j% W5 T1 X
5 V ~1 u& v! U4 S Z4 `网页浏览器作为通用前端* [* x, D; b3 X! d8 A
3 d6 ~7 L1 `1 l! b4 o; v0 e
3 Y6 o* W" x, P% Q( Q+ Y3 i
0 I" D0 R$ {4 _8 `# ~4 m# L
% @: R U& g- \8 f/ o沉默是金:喋喋不休的程序往往不能跟其他程序很好的合作,用户屏幕的纵向空间是宝贵的,垃圾信息对用户带宽的无谓消耗。,- H- k4 n B" Y9 j# E2 H/ g
" t2 s- t! \, W3 P* t' p9 ?
; b. d8 R: ~3 [长时间的操作要提供进度条。& N# C' k- [+ a
7 k6 i1 v8 r/ T; [) n+ k |
|