|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
最小立异原则
/ L O. q1 b9 J+ I) O. T: i" s! V# W2 c" `) W; q
. r. h( m! M* m# o- z4 i v4 f 如有可能,尽量允许用户将接口功能委派为熟悉的程序来完成
( }0 F) j; j( F 不能委派时,那就效仿
; J' Q6 R5 A: U9 C( f9 M ]
8 b1 ^; e( Z$ v& g2 \( q2 `接口设计评估8 e1 @: u' F* P6 N K6 w
- u+ X! b; @; B( @
( n y, a3 v7 d: O' g
简洁: 一个事务处理需要的动作时间及复杂度需要较低的上限. A8 _4 |& ~% b; U1 Y* @/ A8 Z$ J4 ~
表现力: 接口可以触发相当广泛的行为1 K* ^ H# G( J+ h4 m% f/ \
易用: 易用性同要求用户需要记忆的东西成反比
- T o+ w( [9 `% B8 a: p F: {7 h 透明: 用户在使用接口的时候,几乎没有什么问题、数据或程序的相关状态需要记忆
: l! u( t' {4 Y2 P 脚本化能力:很容易被其他程序调用
' E# A+ ]! N' z5 }# r" }/ I- W+ |9 D' E
: F/ Z0 U; m" M3 u/ ECLI和可视接口之间权衡
: T9 c% K9 f& l, N6 Q J- b$ Z) J1 z" K2 Y, t& P1 F3 O) g1 C
( w: K/ P( \' o( E- F
CLI:丰富的表现力,高度的脚本化能力,易用性低(需要费劲的记忆),透明度通常也较低' B, i8 T4 P3 F' O+ J3 i; D, Y$ e
; e, D# w9 w* a8 ^- v- @
2 g! G9 ~' P; n$ r; J4 N# g/ e+ } GUI:易用,不能脚本化,处理规模大的问题需要机械性重复操作
- A; d2 p& p/ l0 \: ]" U, d
( y5 g( P! V- M; |( b9 J( S y" |; P- M, ?) P
长远来看,为了既能服务一般用户,又能服务有经验用户,最好两种接口都提供。
% F9 K9 Q" w1 U) j9 m7 G- l8 n. ]& D! M5 u# P0 S8 h
. v4 d0 u, g* K& O1 o0 M
Unix接口设计模式
3 g/ U* N1 Y: x: J8 C8 Z# `! y. [) D- Q1 Y% ]: e6 O8 m
. ^& c& E( \6 o1 @, s; t! Z1. 过滤器模式
, b8 A- W# D. |+ s" n
) u& ^4 I, h& c& S, L
- t+ H% y- p6 [2 A, r1 s; N
7 s( R5 w, e& q" V* V程序接受标准输入,转换为某种格式后,再输出到标准输出。过滤器是非交互的。7 Z+ |0 _5 W, W2 ]1 ^
5 p" [( a1 s/ K1 l& [# ]
8 }* X7 P. T. Y+ P. Z0 F. e" c实例:grep,tr
" H* E/ O( \0 l Q- c. ] ~: D+ c$ k7 x( ^+ ~
# N$ X U5 E0 J# O) B+ E1 G6 N, Q
原则:Postel原则,宽进严出;过滤的时候,不需要的信息也绝不丢弃;不增加无用数据。, q9 D: g& V% e% b% Z) k
3 H. I; N7 L: V2 C1 T. I6 i' A
~) c# I# G7 H! J
2. Cantrip模式
0 H" s" W2 `$ d5 Y4 A6 K# X5 G
8 O5 q) D% o0 v/ I$ a9 ^7 i- z& ]4 t! t. b# b/ E! U
程序没有输入,没有输出,只被调用一次,产生退出状态码。程序的行为只由启动条件来控制。
3 ^+ k+ I% e0 f' ]. I
1 s% V: C- n( V9 n& m0 Q5 I% `8 H( C# [& L; R
实例:clear,touch, t5 H8 ~. s; i) W( K% R; }
0 u5 w3 t! l7 r6 a" n
) v7 c6 P3 k O+ g" @& A6 n/ u3. 源模式2 D1 Y$ N9 }- J3 S. q: X" P0 I
7 K' a6 q3 L [/ T) R
5 u4 g2 H( m, J+ C1 Y! d- l$ @程序不需要输入,输出由启动条件决定' B% O6 i& N2 m9 z& Z
4 f5 e7 U" O& v! A: @7 d4 I1 M& A& q3 u* A Y
实例:ls,ps,who
( c4 z9 j+ `3 C" k, u
/ B1 m. H9 ]) P) }1 t
' f: O2 U8 ~2 y' z4. 接收器模式
, Y1 r l$ e+ w: ?+ O. ?
) V6 J" r& p4 j3 U7 e5 W3 q# _1 T) e3 P3 i- i2 c
程序只接纳标准输入,而不产生标准输出。对输入的行为由启动条件决定。
+ M) I7 ~7 k) {6 S
& x, @: H3 W% g2 L9 D8 W: ^+ L0 |! A
1 Q- I% O3 S) a, p实例:lpr
% g$ |* v& G' w' i N0 u B1 ?- l6 j4 J/ g% E# X! m( i
+ x! v# I! a h* ]5 ^8 m
5. 编译器模式0 W8 K& y: I& K+ p! B; Z
: @+ n1 h2 {( e8 t$ z; D7 }
/ j: a) \( N; D- ~5 ]( v程序既没有标准输入,也没有标准输出,但是会将错误发到标准错误端。) V6 p5 [% ]9 L+ S/ U; e3 u
7 v. u/ }7 M" J; n; y2 t/ U. r* g7 Z1 W
实例:gcc,gif2png,gzip
3 E0 B$ Y$ l. U* ^% p
6 g- R* v7 }/ T
: i7 s% R3 Q$ T3 X6 y6. ed模式: e* t: f Y9 b9 R; H0 F- l: s5 }& J
6 Q* ]! _/ v- Z, x) p8 ^1 K( G
; ~/ J: X/ I7 q; f+ L
程序具有很强的交互性。
; Y3 r" R$ G/ h( g+ R' k
; N7 j. T E, |/ i! T0 o- z) m5 r! [; ~4 V; K1 I0 Z
实例:gdb,ftp,sh
5 p" J. Y, e, w8 |
# q/ E Q( g$ ?5 }' M$ _, C t2 o
7. Roguelike模式4 R6 \8 H2 l: \- J
- p) g: l/ g' @# {0 P3 N2 z
+ m; s1 y: y4 T5 f* x+ R7 y运行在控制台的全屏、可视界面风格,但使用字符阵列显示,而非图形和鼠标界面。) F; {9 r/ A- A6 q) D
. a9 Y+ O: F8 B& G
7 r1 g8 o- H* `/ k |- r/ q
实例:vim,emacs
c1 u6 ]: } Y6 Q( F
5 j' R) E0 h; ]/ a) N" C
" f( i* V( o, ]/ c/ A8. 引擎和接口分离模式
) H& b! F" t1 _! A9 k4 G) n& b, [! U. C8 A% ~: h
# U9 G! R. _' F9 j模型、视图、控制器模式
5 p6 A m2 d0 a" T, J2 L# G) G- y% ?: c2 m a% r' x
/ h' M, L @. I+ }4 i' N几个变种:配置者/执行者组合(fetchmail/fetchmailconf),假脱机/守护进程组合(at/atd, lpr/lpd),驱动/引擎组合,客户端/服务器组合9 ~2 ]/ \& D% u9 C) F
/ g! s* J6 [% A
: p% \# `; t% U6 ?9. CLI服务器模式
8 Y9 R& }4 [$ u W" D* H' m _0 ]1 k
& M5 A) _6 `7 T: D/ f
程序以前端模式出发时,有一个简单的CLI界面读取标准输入并写标准输出;以后台方式运行时,将stdin和stdout连接到专门的TCP/IP端口。
. N) `* ]" t" `* f" r8 B. T! m6 G$ j) F3 a* r
, e. Y1 V' A1 b6 T; @
实例:POP, IMAP, SMTP, HTTP
- D* o+ {( m" _+ u
% A: q& i* \ c, S; ] R- e/ O/ ]( b6 K" z4 \$ l
10. 基于语言的接口模式
' E0 v p8 o# h9 x1 I' S% s- a) r/ ?5 O6 n; T) x6 E' P* y7 `
8 m5 u* i. B; y$ ~5 f, dGUI前端同CLI微型语言后端结合,程序往往拥有一个的内嵌脚本语言。4 o) t: d) I) h, O! N- u
8 |- f, [* G3 W1 P v
, X7 P8 G4 K, m6 V
+ h# J) Y4 G. j/ ~+ _' j6 }) j. j, P' g5 E
网页浏览器作为通用前端
) ?# B: s+ y% `- l2 q3 f5 g1 g$ ~# T1 H% o- d$ r. e6 C
5 E3 `! u% ^' M9 Q' y$ f# ?$ q! w1 v* [" s2 k
; g% ]8 b" I) i" h! U4 f5 z; X沉默是金:喋喋不休的程序往往不能跟其他程序很好的合作,用户屏幕的纵向空间是宝贵的,垃圾信息对用户带宽的无谓消耗。,4 ~" |2 t* W$ e* F6 o( e! Y
) i4 M! X! x! ~7 a) ?! _; ^! M% p7 v8 q3 F* q
长时间的操作要提供进度条。
0 C( u9 H7 y* `$ x9 p2 X
& {9 z `$ [: t- C0 y |
|