|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
最小立异原则
9 U f/ M! W0 d1 q) L9 D- ?
5 ~8 F- G/ u! l9 S2 x" m7 d
, n: s [2 m. L, o4 r 如有可能,尽量允许用户将接口功能委派为熟悉的程序来完成
; g- L) _& K7 y5 g; i% K/ V 不能委派时,那就效仿 ; W. }3 e7 f- l X d. n: x
4 q: C$ Z/ D: L5 ?4 U接口设计评估4 i+ K z& I# l: [+ E0 q
& Q( r' a7 _ t9 m
( F- n/ ?6 ~$ j 简洁: 一个事务处理需要的动作时间及复杂度需要较低的上限& F4 P) t2 ]$ c
表现力: 接口可以触发相当广泛的行为
( {) X9 ?1 X# N& l 易用: 易用性同要求用户需要记忆的东西成反比- k; n: n+ z9 g
透明: 用户在使用接口的时候,几乎没有什么问题、数据或程序的相关状态需要记忆! [% R7 i3 W; Z' o4 q; W* c
脚本化能力:很容易被其他程序调用; V, `% T2 I9 ]0 k/ U
+ S6 |* A, T& E: s) t$ V+ h0 Y
) f( r, b) B0 E- p9 w# N/ i" m; d
CLI和可视接口之间权衡
7 O8 g* W) p& H# o$ C
! j% C- {# Z: t, t J9 d, j
1 z3 a& F! W# A! ^" @ CLI:丰富的表现力,高度的脚本化能力,易用性低(需要费劲的记忆),透明度通常也较低8 O) K$ x! N, K+ u4 w) |
( y8 i/ \+ S0 D6 f) ] h0 l' F7 a% Y8 o% o( [, t2 p1 S; \8 a U# }
GUI:易用,不能脚本化,处理规模大的问题需要机械性重复操作
, M6 r- |3 p8 V% S' {# M3 @3 O+ M7 P" C" t3 i' X% a
3 u7 t; [ j* Z B+ k8 {
长远来看,为了既能服务一般用户,又能服务有经验用户,最好两种接口都提供。$ Y' d6 [ t, Y, t' q
/ X4 J2 d/ Y8 s. k& Q1 O% q% @
P/ L' H, K2 ], G2 ^# Q% H, M8 AUnix接口设计模式3 O/ z' c4 B- P3 R6 m& Z' R
9 {8 N7 f# E9 h. M) W& G! N* r6 x1 Q: d+ C* \' Y7 O& [
1. 过滤器模式
; i& Z9 j; x. g; @9 [% v2 u" f8 Y: j# e" z# G
! m6 {4 [, s0 v8 j, M$ w( Y$ w
1 E ?7 ?* ?" i1 O G
程序接受标准输入,转换为某种格式后,再输出到标准输出。过滤器是非交互的。
& F/ e7 ?% j" g
; z) }7 H3 P/ s* l
- O* e* Q2 n* h6 L5 r; R实例:grep,tr
, J Q- e6 `" M" v
+ S: i: F4 i! t- B- q5 I0 d! ~0 ]. _& |4 S) v2 B
原则:Postel原则,宽进严出;过滤的时候,不需要的信息也绝不丢弃;不增加无用数据。
% v$ a5 _# \( w: }$ D4 P: Q& J r: R8 l8 {6 z" ?# P4 q$ i
' u# T2 v+ S3 p# i! |2. Cantrip模式
! T8 z% z; F7 H+ @0 U1 H
$ I8 z* h- i1 E, m* I6 M1 D
0 n9 V& B3 q4 E* g: A程序没有输入,没有输出,只被调用一次,产生退出状态码。程序的行为只由启动条件来控制。
- g3 c+ x& }; k0 H8 H( y
, l( U: R+ {( @5 u( f( ^9 r+ I' t! X0 z5 x5 ]1 Z
实例:clear,touch
( p C# d+ O1 G0 y( s* I! d' q. p5 b% \9 @
: x+ i2 q7 N# O+ K$ C
3. 源模式% w2 |7 ^. P, p& b9 n8 q/ a
9 M$ q! L3 `5 J, J; y* u. {! N! F) E) A, k+ v5 F" g9 O! L$ ~; I- t
程序不需要输入,输出由启动条件决定
+ _# ?1 W6 l F4 x3 J$ F0 o6 a0 E5 c) ?2 X* B4 v
7 O. d5 s" R, D. Y7 y
实例:ls,ps,who# q# W& D$ s5 Q$ w
, Q4 o' E3 a4 Z E2 K5 Q9 B8 r3 }; P' }
4. 接收器模式) ]4 I+ z# w% k! W0 h& |
" X. F- B6 F& i8 c( e ? s2 K
! b+ a) t! p) m; E( h0 |
程序只接纳标准输入,而不产生标准输出。对输入的行为由启动条件决定。6 l# v* ? @) r* Y, D+ c1 ]
5 f. O1 z; n5 M" U/ `, O* \: l5 F
, f4 H+ b4 V5 }实例:lpr, f& {( k9 a1 ~% }$ a7 B
6 Y+ g4 [: i3 k/ P b. d: D2 r0 ]5 f
5. 编译器模式
) m! t3 `; n k/ F% O. P7 N) \+ ` M% B- s
! N+ `" `7 z; k) M程序既没有标准输入,也没有标准输出,但是会将错误发到标准错误端。6 {4 p1 f& r& {9 x
, @3 L- j4 d7 `/ Z0 u" c8 f* A
. H! X. z) }, x2 T2 r; ~1 k: ]6 J实例:gcc,gif2png,gzip; c" s* l# G6 c+ ]+ v- q
7 |9 ?5 I; a# Y$ ^" _; k. g% G$ \5 Y3 q: d
6. ed模式% W% q$ }5 O7 l* V6 v
, t) e {/ n, d$ e/ K
3 _5 q# u% n; Q! f2 i1 r9 }6 u程序具有很强的交互性。5 K: a4 {+ I; X/ ]9 _$ s; ?
* J4 C% X6 p* k1 Z; v5 C4 Y# w& o
p+ v% f! u* C9 J实例:gdb,ftp,sh
% M$ Q1 [$ O/ }8 n, S' L O
$ p" S! J8 ~: d; x( R6 I x8 y; c* F. }" v* n$ s$ }
7. Roguelike模式
' r7 X6 Y: s) p0 Z. N; E3 [6 P# `: x6 q) M: W0 r+ t* C9 q
% P7 b4 w8 t4 K$ @+ ^1 i# A
运行在控制台的全屏、可视界面风格,但使用字符阵列显示,而非图形和鼠标界面。5 l+ B6 g, p4 h6 x8 c; f
! r" U5 x) q ^
+ a$ q7 d, X) C7 Y" q8 Z实例:vim,emacs
! F2 a* _0 \& {% W P. x- v% {8 E4 @( l% a$ ?" L3 u( T
" ?+ F# D9 l4 Y+ x8. 引擎和接口分离模式7 O8 {- t7 T$ Y. T
( w4 [* K1 g0 B% F( g( U5 t& p; e! B9 D! J" o- q0 M
模型、视图、控制器模式
# |( M: F8 I, D- O* S: c* {9 u& K A, H" ?
) f7 |/ U6 U4 U+ r% A' i1 h
几个变种:配置者/执行者组合(fetchmail/fetchmailconf),假脱机/守护进程组合(at/atd, lpr/lpd),驱动/引擎组合,客户端/服务器组合
, D& `+ m1 r6 d H0 S$ m7 P; Q a- v9 j y4 f* S
" ~+ ]0 M3 @. V+ P5 d' Y! g3 {, \
9. CLI服务器模式
! h+ f- R5 a& i* R
+ k4 L. t9 Q3 q2 M& h5 c1 w7 \# i% S9 u4 J: [6 }4 P
程序以前端模式出发时,有一个简单的CLI界面读取标准输入并写标准输出;以后台方式运行时,将stdin和stdout连接到专门的TCP/IP端口。- |, c( R3 m. I) t
( Q8 U/ [- b* @: g) m/ ?' d7 O) f; R/ U: z( j
实例:POP, IMAP, SMTP, HTTP
. d' P# F# t( n' e
, ~8 t: p M4 y1 x: x
$ {: Y" s: H7 @ t6 }# z" v' J10. 基于语言的接口模式
: n6 q7 u( B Y0 {9 L4 ^2 O
2 u- w- z- {" c9 m! V( L! ?* {8 \8 V6 R6 w* O2 ~
GUI前端同CLI微型语言后端结合,程序往往拥有一个的内嵌脚本语言。
3 o( N; [7 b. g6 T% D8 e( P2 C, \& z: ?) c: k
0 S8 w1 v1 b! f
; O4 Z G! {# Y5 q( Y# K+ g
% s) z9 A5 U$ j/ B7 H6 j# N网页浏览器作为通用前端 y0 ]# b3 X5 @' n7 Q9 ^) ~+ V9 }
! `7 ^5 U( [/ J7 J0 q
j' |2 u% i4 z3 m/ O8 o+ |; m0 C" V, u5 k9 m
3 I1 ~5 ]9 z; d" g; U) ~0 j沉默是金:喋喋不休的程序往往不能跟其他程序很好的合作,用户屏幕的纵向空间是宝贵的,垃圾信息对用户带宽的无谓消耗。,
- @% e& ]/ }; D. z
' O; C4 @1 @8 X. h9 }9 |! V
5 f3 n! D) Y# w6 D长时间的操作要提供进度条。* }2 O' {9 F5 F+ @4 t+ V9 p
$ u' S3 \% M$ x& z7 g& T( o
|
|