|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
最小立异原则
7 E1 ?! b0 l( p/ w* y
2 i8 F9 Z" m3 o4 t* V: s; ^' J$ o; d5 Q
如有可能,尽量允许用户将接口功能委派为熟悉的程序来完成
6 r9 m4 S4 J: ^# Z8 v, f5 r$ l 不能委派时,那就效仿 2 S* P2 a; v; T0 f+ k2 G2 Z! Y9 b
* ^: _# n, Q$ d/ q- j; v7 t$ {1 Z接口设计评估
0 u1 F c/ v# m3 m) ]4 n7 p7 n0 T2 u, A/ H6 o7 Q i$ {
`( Z0 m) @# M" H( l
简洁: 一个事务处理需要的动作时间及复杂度需要较低的上限. b/ |- |; c. u
表现力: 接口可以触发相当广泛的行为
4 }3 |" p/ {! G" ^7 ?# v1 n 易用: 易用性同要求用户需要记忆的东西成反比, ~0 f4 m' t4 R" L& M
透明: 用户在使用接口的时候,几乎没有什么问题、数据或程序的相关状态需要记忆. C2 R. J* t! C" Y; ]! D5 O
脚本化能力:很容易被其他程序调用
9 L1 _3 ~. e8 p4 I
5 f1 |* o9 U) z d- c) U* }; e- b+ p' |
CLI和可视接口之间权衡; V% a& V1 o5 t- y6 {5 z' o4 D
9 z9 e, a* A" G
- m: i/ T" ~8 J! e CLI:丰富的表现力,高度的脚本化能力,易用性低(需要费劲的记忆),透明度通常也较低
9 ^/ g8 N7 X* K1 _6 f1 N5 w0 j& m* L$ @3 L1 i. E( }
/ G! ^6 ^$ P! l# e" O GUI:易用,不能脚本化,处理规模大的问题需要机械性重复操作 C: W) K3 J8 e8 @! R j2 s
, x. W ?! S8 C7 C" o8 G
) X6 Z2 z8 w3 @) l
长远来看,为了既能服务一般用户,又能服务有经验用户,最好两种接口都提供。' A& C+ N$ @8 p- x
6 F% I- q. d, @) \0 o4 A# J" x
! t8 l6 l2 c! Q" e1 iUnix接口设计模式) F" Y) A6 b' ]: t. E2 ?
) L& c6 O" K5 `5 t/ a* c4 g0 f( B3 u+ m/ Q& }, X, T
1. 过滤器模式5 l9 p: t7 c6 v
* q k2 g' S. D& {: R B9 A
2 X2 v! D- Z! I* g/ ^. H A3 ]% `% S' K
: } ?- y1 G( n, j5 F程序接受标准输入,转换为某种格式后,再输出到标准输出。过滤器是非交互的。
l+ h& p+ w6 v2 Q- i$ X F4 M f {. f( f' f1 M# E( D7 M5 O
d+ S3 D& u% F! X" e实例:grep,tr! v' {4 n3 b3 `0 `% r% E: j
: K' Y: N4 x8 n. \9 w, _' Z
2 Y& ^0 Z8 Z9 e. C
原则:Postel原则,宽进严出;过滤的时候,不需要的信息也绝不丢弃;不增加无用数据。: B1 J, ^, {( z- b" d
) [2 [! }$ @0 _& S A, P
]7 C; \* ~& {/ E% }# v, P$ V2. Cantrip模式
6 l# n& d- S( x& X$ b0 i) ~) |4 S
5 T( \$ S$ Q8 d( r
8 i2 g' _7 h$ m3 t; p: Q L程序没有输入,没有输出,只被调用一次,产生退出状态码。程序的行为只由启动条件来控制。
8 S% @" \2 c) i$ I4 S
0 F* ?8 N9 o' T1 n+ T& h8 e8 ]5 {3 E) Q( O0 n
实例:clear,touch
2 S5 x; l3 W4 u7 e: h
( j- v8 ?& \5 V0 a! L$ d
4 [5 |6 W) B) l* L* h7 E3. 源模式& H8 P. J+ L: p' A( ^1 R, `
}, c" N% F; z
; o/ b) `8 K2 z m- W程序不需要输入,输出由启动条件决定/ V7 V, k8 B8 ^! h& [
7 M/ ]* z/ t# e0 |8 ^2 X+ Q0 m
0 x% _' n1 S6 D H. _. J' E实例:ls,ps,who
: X/ W; l& l0 \5 d3 N% \* G$ d& y) o/ i6 ]* d
5 v K! R- {: ^; l3 L
4. 接收器模式
( t0 b% h. E" s
" K# @' {! H7 y4 m5 B" a5 N' X( b5 k0 r
程序只接纳标准输入,而不产生标准输出。对输入的行为由启动条件决定。
- C9 C. s% ~3 W
; c. w: u! H, @7 i7 Q- F5 ?8 {4 o
; ]' A0 ]$ h' m实例:lpr0 d x c4 @/ h! R5 |. H: Y0 x
9 s) s$ Y1 d+ b+ T$ G) c; ^4 v9 E& U7 I7 }6 q( G
5. 编译器模式
( |1 d, M& z8 e% K% ], Y0 @% i! W" H& U
+ |0 F( I' c3 D
程序既没有标准输入,也没有标准输出,但是会将错误发到标准错误端。3 Q* C, D$ P# T0 X% H7 y) D
# ^, d' J' c. i7 O. x5 u( N
r. ^3 H+ }3 J6 z. N3 A0 D3 W实例:gcc,gif2png,gzip
4 u5 `: \+ h) `& G9 V5 [3 [0 I1 j" N' o! p
' R, ~4 w {3 S2 H# _8 L; }6. ed模式
2 u/ L* Z8 Z& Q9 C# H' P% G$ T, n1 z/ D4 \# m0 t w) R x% c4 h
9 J* I0 i$ c. T* _程序具有很强的交互性。
6 r$ S* Z, e* }) ]1 s0 ^" ~7 h" L1 @! o/ Z* D& u9 C
6 ?7 z! e- V5 L8 t8 M
实例:gdb,ftp,sh$ G9 W3 m2 P( v6 @4 M H& e/ ]6 a
0 P' x1 }5 H0 F% q" C; Z
B% d1 h1 y8 f% Z# `' }7. Roguelike模式
3 X) ]7 V; l; b; L7 j3 t; W7 w/ I5 m$ z) ?- t- ?) G; j# q
6 _+ U; [" ]' A, k, ^ n$ _" b$ x
运行在控制台的全屏、可视界面风格,但使用字符阵列显示,而非图形和鼠标界面。8 H: q. C; i s! [" C' \
4 v) |2 M& c, X# E o" @( x+ B
6 S4 L3 S @ S; a实例:vim,emacs1 B' T1 V# `* g# l8 G) @" O
# J+ H6 l1 \3 a* Q* Z
+ _3 ?. m% U0 f8 Z! j
8. 引擎和接口分离模式" X7 ~- y I3 w+ J; i) K
: f) g" }8 |6 ~ k" h8 [$ N
R8 [7 S" u4 Z+ ]: H& W3 ?2 v
模型、视图、控制器模式
- {% ?4 d; r7 i0 W$ \( ~2 _ B4 j/ K A8 g6 \& z- l
) r. y- H4 v. i t几个变种:配置者/执行者组合(fetchmail/fetchmailconf),假脱机/守护进程组合(at/atd, lpr/lpd),驱动/引擎组合,客户端/服务器组合1 L) ?! j( e1 B7 K. s5 ?# f
2 _2 `0 Y/ z6 o1 X: n
3 y) ~& ?" o v+ K9. CLI服务器模式
# D1 w& S: x8 {2 I! J1 A' k8 h3 |. Q2 K' Z1 K' O2 s( i8 @: C [
7 t5 W- o$ `* v4 ^8 @
程序以前端模式出发时,有一个简单的CLI界面读取标准输入并写标准输出;以后台方式运行时,将stdin和stdout连接到专门的TCP/IP端口。
8 c1 \$ N2 ?; ~/ X( d( b# ~8 M9 y6 h
# v# Y$ H) j) [. r4 q
实例:POP, IMAP, SMTP, HTTP+ g! j0 B$ T5 d$ \2 Q0 S7 S
+ T4 h" q. C" U
0 R4 u! ~! u9 W( f10. 基于语言的接口模式
- u Q* G& A- l* z- Y) t8 [$ G% ~! Y; P1 P. n1 u- O6 S
0 L9 o3 n1 z$ g/ h# s8 bGUI前端同CLI微型语言后端结合,程序往往拥有一个的内嵌脚本语言。
9 K2 u7 I( C5 f6 Z+ V# _6 f4 g3 @, R9 F6 ?! C2 N
p# z" L8 N% }
9 @+ a3 b, n9 N
6 G" {0 I- P$ n0 C网页浏览器作为通用前端
" D; C, ^5 M, \0 p
( B' m9 e3 w' k; f
8 c! d% l/ |* W( z9 s' O8 T( G* b! w: Y' E% v
2 Y3 t( O' ?4 j1 }, `
沉默是金:喋喋不休的程序往往不能跟其他程序很好的合作,用户屏幕的纵向空间是宝贵的,垃圾信息对用户带宽的无谓消耗。,* l% u. o/ F ^; P) v
6 o0 Z; H% \! F) u. d
' ]5 B( i( ~3 K7 V6 X8 }
长时间的操作要提供进度条。" ~: `6 A; H# @0 S# @
) l( I x$ ^; X& D+ F1 M+ F |
|