EDA365电子论坛网

标题: Unix编程相关接口 [打印本页]

作者: mytomorrow    时间: 2020-1-16 11:06
标题: Unix编程相关接口
最小立异原则7 h8 n- r+ e3 n2 t) D. Q9 G

' T+ i# |& O+ Z; R9 b) V, Y6 _& o( y
     如有可能,尽量允许用户将接口功能委派为熟悉的程序来完成; S1 f" v6 z% b' s, _" ]9 l
     不能委派时,那就效仿

: \& W8 j# p# t5 D7 u, c
# K$ r' }7 J4 d4 q/ T接口设计评估
3 f$ i/ B' }" q) [
" I& u2 b6 v2 K: \; I  G, B# _4 w
- j8 h1 X1 j) \  }; V     简洁:          一个事务处理需要的动作时间及复杂度需要较低的上限
8 D% }7 U, T  ?& X( b* p5 s     表现力:       接口可以触发相当广泛的行为
# U* D8 h* U6 v     易用:          易用性同要求用户需要记忆的东西成反比  e! A$ Z6 R9 T- B* o
     透明:          用户在使用接口的时候,几乎没有什么问题、数据或程序的相关状态需要记忆9 c( A' M4 y% v2 X8 h
     脚本化能力:很容易被其他程序调用- j" s& \% X1 Q1 U% t! o
4 {  m) e9 A* q. a. ]0 i: d1 K

1 C/ L: s. R7 k5 c7 O' gCLI和可视接口之间权衡
5 R7 _5 \: e) i; Y. T7 O' t8 ]0 c3 u' P! L' ]

" B5 E  Q- _7 {     CLI:丰富的表现力,高度的脚本化能力,易用性低(需要费劲的记忆),透明度通常也较低
; e6 b) l: P% V9 g$ s
  F' `: l; u( A. E% e* t' r/ X& S7 a$ _/ Q' `% o/ A
     GUI:易用,不能脚本化,处理规模大的问题需要机械性重复操作7 G0 S0 u( _; S  z& l2 H* y% U- `

4 }$ q7 [+ `" B2 d9 T; G$ T' {8 |9 C( A2 g3 W2 q+ q2 W% I
     长远来看,为了既能服务一般用户,又能服务有经验用户,最好两种接口都提供。
. v$ O* M% C- b" l0 L% @3 p9 |
' S" u6 q$ m1 l- e7 V5 X$ G4 y1 o' q) s- v( U+ J* c) c$ N
Unix接口设计模式
& M- _7 }9 o" j' o; V. m4 v) r# f8 P# Z; l. g& E% S

: c. W- m; x$ F3 m3 Q$ g1. 过滤器模式
- @% \7 K2 y1 _% I* s' ?
0 x( x# ^; x0 ]9 e8 I$ _3 j% M$ A* U5 I; `8 m& w, {

, N3 d) {; Y) [( t. d& c4 [程序接受标准输入,转换为某种格式后,再输出到标准输出。过滤器是非交互的。
. r' a. C- _2 l8 J( _5 S$ v0 I. X6 J# A3 [$ F- a( _* L6 f
% Y  I- y; [  y# U0 [/ K0 s4 w8 [) L& |
实例:grep,tr' p/ p% E  {+ [4 }, g2 X4 O5 _. k

, f. y! {! r# C3 J) d# F/ K4 \5 e% J! Z
原则:Postel原则,宽进严出;过滤的时候,不需要的信息也绝不丢弃;不增加无用数据。) c( t8 x+ _! E

) v" h2 C! G8 b" I; K* G1 F4 i( Q, B6 A
2. Cantrip模式! W6 u/ U& u' v' X$ _0 Z

# a, m' W0 S6 T& v  U/ \1 M3 K1 P9 H4 F8 Z! y. z" Z- E. u
程序没有输入,没有输出,只被调用一次,产生退出状态码。程序的行为只由启动条件来控制。
0 g3 G  G! S7 k, `2 n9 D& s# j1 r' k
2 [3 d/ C9 L' K
实例:clear,touch1 Q* i% g% a3 Y; L% m' H
9 o7 o3 X- w6 H6 z! ~% w4 ~

+ F$ T8 \3 a) {4 M3 I; X3. 源模式
! T5 j7 R9 {$ m" P. W5 r) n; T+ h, A2 R+ }
6 f9 k! r8 a8 k3 x
程序不需要输入,输出由启动条件决定+ X1 D9 k8 G" b( _- H: l
! l3 Y# i6 N, X+ M) T5 I) U9 u# r7 Y
& g' e3 c  h( `9 H7 p( v7 Y
实例:ls,ps,who
' P9 r. i6 n: `# }$ l3 x" e/ Z
6 s9 k  B0 F, h
* W% \/ \: J0 Z: l  o( k* f( B4. 接收器模式- ?. y( a/ Y) g  Q3 H* f

) l; {  ^% k) p
  Q7 c- @) X0 M- h  }( o4 o程序只接纳标准输入,而不产生标准输出。对输入的行为由启动条件决定。7 }3 \7 W% {8 p/ L

* M0 c; V; X2 J, \5 i7 Z
* L0 s+ R) V; G* J7 q$ a6 T实例:lpr4 y/ n- n; m; J2 G

/ l) S3 Z% a" `; {4 n, d  `5 ?% }: g: \; N  B- X! Z5 h
5. 编译器模式  N9 \& I0 N7 q$ p# F% Y
9 k! Q' {2 U8 T4 q* H1 k+ B5 O& o

$ G( V4 R1 c3 M程序既没有标准输入,也没有标准输出,但是会将错误发到标准错误端。( X0 P+ D, h$ I1 c) B; r( P" o1 K

! C' ?6 c- r' t" ~. ?( U6 B8 I4 H% j5 S# ]# l9 S2 j
实例:gcc,gif2png,gzip
% Z4 v2 Y& M, O. Y1 r7 n
; _* @5 q5 H( n1 V4 \" O3 g9 i4 v1 u" Q6 n8 A( `, W
6. ed模式
6 ~8 ]6 s3 f% G
( ?, e* r5 W7 }; a+ ^2 y! q, U7 h" i/ }4 u5 @! O0 C4 m
程序具有很强的交互性。
9 J! A. \* x- g  g0 z7 F- z. T# n# t" ^3 Z. A% [- b8 U6 Z! C4 h

0 w& P+ c7 R3 r4 `2 L5 E, O实例:gdb,ftp,sh+ }% p/ a% j/ T1 l' s. N
# Y, v/ B$ i( t6 O

1 y8 w) P% p+ e" D7. Roguelike模式8 Q" d0 c, }. T3 W% {
6 y2 z2 `) Z; R
6 q9 @& W4 P! Z* T0 j* t
运行在控制台的全屏、可视界面风格,但使用字符阵列显示,而非图形和鼠标界面。. m" n  P4 z! w6 _) g! `
2 R9 _( G/ {7 P  p
1 O5 p! S2 `- L1 W; ?
实例:vim,emacs9 n0 V2 e) {. ^1 L5 p8 i

6 Q6 ]  W) t8 Q2 Y4 Z
6 H8 ^2 n; @, r( _6 f+ s4 u3 K8 N8. 引擎和接口分离模式
7 b4 ~5 W' ~9 d+ m+ k" i
  [3 |, }# k6 s9 @$ H% ~3 l$ g' L! }& S5 r7 W# M
模型、视图、控制器模式. K, H5 Z# C6 E% J  N

% \1 o, `, ?8 T2 F( S' R/ m
7 T( w& d: ~* {- ~, M2 b几个变种:配置者/执行者组合(fetchmail/fetchmailconf),假脱机/守护进程组合(at/atd, lpr/lpd),驱动/引擎组合,客户端/服务器组合0 O/ U* [/ w- N' i/ i# s% w
0 i' a$ k0 n! `! {, U8 l
9 t& t" G+ K* o# B0 C0 P- t: d
9. CLI服务器模式
" D5 O9 M( s% ]
, Z* a0 q) Q2 q6 e% B- x! }5 u
/ y3 Q- {. N0 e9 e8 b程序以前端模式出发时,有一个简单的CLI界面读取标准输入并写标准输出;以后台方式运行时,将stdin和stdout连接到专门的TCP/IP端口。
$ [1 ~- ?8 B, ^  Z6 a2 M! Y" ]' |( p. e5 ?( J' Q
, H: c- r+ p. Q$ y( K# k, a
实例:POP, IMAP, SMTP, HTTP
+ u. w! D- o2 G+ r9 s3 S
2 j4 X3 x2 ], a9 O4 F3 ^
; J  W+ n9 x0 k0 `% [10. 基于语言的接口模式
8 [; }" u# @7 L2 l5 v6 s  [  X/ i4 _( _4 p
$ V) `: [4 c) J: T  H) U/ }* |: Y" l! ~
GUI前端同CLI微型语言后端结合,程序往往拥有一个的内嵌脚本语言。
* o; N* H/ Y. N& B1 Q$ Y, ~. X8 X3 I7 n7 k

/ `5 W  {# H" F1 p
- y5 A# |6 h" w( l# T% b9 Q$ t% p) ?; l4 d: \* @$ U
网页浏览器作为通用前端
) B; N* z/ T- U# g
+ F% m& I+ s: H: `8 v6 v3 I$ R( \* T4 a

) R! ?# T8 `& v2 p- l. x" ?
3 z& B3 ^- \9 j% ?/ U' G沉默是金:喋喋不休的程序往往不能跟其他程序很好的合作,用户屏幕的纵向空间是宝贵的,垃圾信息对用户带宽的无谓消耗。,) d/ Q6 y; d5 p) a8 F4 ]" i( B! `
" X% Z& w8 _& y7 Q% I* C% b

% i3 f; K+ v* W  M, }/ ^长时间的操作要提供进度条。
' h5 O6 D2 q3 h( T* U, N& t2 {$ {4 e1 q. L

作者: xixihahaheihei    时间: 2020-1-16 19:40
Unix编程相关接口




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2