爱吱声

标题: Best Practice [打印本页]

作者: 老兵帅客    时间: 2011-9-27 22:11
标题: Best Practice
这里干软件开发,经常会遇到迷信Best Practice的家伙,一说起来什么都要遵循这个,否则就要不依不饶跟你扯,实在是烦人啊。/ Z, `8 a5 _; [
, z- X  F& v, ~# f# \
举个例子,一个web应用,给分成了presentation layer, business layer, data access layer等等。这个分法倒是很合理,问题是人家认为数据的校验也是每层都要做的,理由是各层都有可能被替换,你如果不做如何保证数据是符合要求的?很对,但是实践中就有很多问题不好办了,问题出在了测试上。
8 E+ V$ ]) m; j& t" I/ b1 [- j5 k
具体说来是这样的,presentation layer包括浏览器部分和服务器的对应接口部分,前者的校验用javascript而后者用java,这就是两层测试了,再加上business layer的那层,起码就是三层了。这三层测试所做的工作,或者说所依据的规则一般是一样的,因为就是一个java bean在那里传输数据嘛。可是问题是如果第一层已经做的完善了,第二层又怎么可能检测出问题来呢,因为可能的错误已经都在第一层被发现了嘛,于是为了让第二层检测能够工作,你必须关掉第一层检测,这意味着修改代码,而任何修改都意味着可能带来新的bug,这个怎么检测?第二层和第三层之间的问题跟前面是一样的,也就是你必须关掉第二层的检测来让第三层的检测有机会干活,这里同样存在前述的可能带来新的bug问题,同时这三层检测在交付以后需要同时存在重复检测,这开销怎么算?
0 m3 f3 M8 o- U6 x. @% ?" ]' C% R. u8 t# A4 b1 v: M2 t
有人可能会说,那是必要的代价,因为各层都有可能被替换,因此各层自己的检测是必不可少的。理论上这话完全对,可是现实中几乎不存在替换的可能,因为那意味着整体结构的大修改,即使出现这样的情况,交付以后的其他各层检测还是没机会干活的。于是一个看起来完美的方案,现实中只是在浪费资源而已,因为同样的数据要被检测三次,而只有第一次有可能被检测出问题来,后面那两个都是白忙乎。. u. y5 ~  Y9 R) @4 g: d9 T
$ Z4 d0 W( ?) S) ?/ H4 w
这方面的另外一个例子就是ESB领域,这个领域的用户普遍都是些大用户,具体实践就是一大堆的web service在那里以workflow的方式运行,这点没问题,问题是每个web service的设置都有着全套的安全规范,例如双向SSL和WS-SECURITY之类的,哪怕是这堆web service都运行在同一台逻辑机器上也一样,于是就是大量的开销却没换来任何安全上改进。
作者: 小绿爷    时间: 2011-9-27 22:17
隔行如隔山,对我而言基本看不懂
作者: 老兵帅客    时间: 2011-9-27 22:43
小绿爷 发表于 2011-9-27 09:17 5 N' I5 P& P, y
隔行如隔山,对我而言基本看不懂
3 d& y3 ?& c4 y+ o
没关系,重在参与嘛
作者: 旅途愉快    时间: 2011-9-27 23:32
同意一楼意见。。。) v9 ~8 E  f+ o) r( B
囧,什么都没看懂。。哈哈
作者: 老兵帅客    时间: 2011-9-27 23:33
旅途愉快 发表于 2011-9-27 10:32
& _( M! n" F" O9 \8 L1 M同意一楼意见。。。
; m/ x% n$ Q5 S2 O& m囧,什么都没看懂。。哈哈
" Y& o, d; r% E
又是一个重在参与地
作者: tonyxu    时间: 2011-9-27 23:49
我家倒是有本书,Thinking in JAVA,是LD的,不过她现在在搞ORACLE。。。
作者: 老兵帅客    时间: 2011-9-27 23:51
tonyxu 发表于 2011-9-27 10:49
! ^: a6 u& N8 \( l+ t( i/ B. d我家倒是有本书,Thinking in JAVA,是LD的,不过她现在在搞ORACLE。。。
; H1 u- |* B, Q: g& C+ o
还是个重在参与地
作者: tonyxu    时间: 2011-9-27 23:53
老兵帅客 发表于 2011-9-27 23:51
, V) n+ k: m) b2 ?还是个重在参与地

8 Z2 d% G# c* ~! S8 D& ~absolutely...
作者: 飞翔的芦苇    时间: 2011-9-27 23:54
不懂,坐等懂的人来谈。
作者: 老兵帅客    时间: 2011-9-28 00:00
飞翔的芦苇 发表于 2011-9-27 10:54
) @0 v- i0 h4 n; y) M; m  [& H不懂,坐等懂的人来谈。

* k! X% c0 N/ J怎么就剩下重在参与的了,干这行的都哪里去了?
作者: fareast    时间: 2011-9-28 07:11
软件中检测部门大部分都是女性吧,华为的软件研发我很清楚,全球采购便宜的,再加上核心数据集成。
作者: 老兵帅客    时间: 2011-9-28 07:58
fareast 发表于 2011-9-27 18:11
! H$ G. M/ @' q3 v8 Z- K5 X) z3 o5 D软件中检测部门大部分都是女性吧,华为的软件研发我很清楚,全球采购便宜的,再加上核心数据集成。 ...

' w9 H5 B, q# w8 t: i. i你说的是做QA的,我说的是软件开发过程中写的检测程序,两回事。
作者: 四处张望    时间: 2011-9-28 11:32
esb那个如果不是全是自己搞,不好这么算,用效率和实效的角度考虑防止扯皮是想不透的。
) V  v6 {- p# T; i# h- X0 J1 q第一个问题其实也是两说,就是不知道这么提倡的家伙是从哪个角度考虑了。
作者: 空气精灵    时间: 2011-9-28 11:50
个人认为, 每一层的检验是必要的,但是,重点应该在于本层所生成的数据,而不是检查前一层送来的数据.8 d& R7 q' m6 e8 b& n
也就是说,需要假设,前一layer/flow送来的数据都是准确的." [* b0 c; |0 t. h2 L' E1 @% ^
当然,必要的入口参数exception还是需要设一下的.如果真的发生了exception,那么可以推论是前一layer/flow出错了,让前一层自己去查吧.
作者: mark    时间: 2011-9-28 12:09
老兵说得很有道理的。不过这个还是要看放在什么应用环境下。, B2 d3 q5 U$ ?7 ?4 x

3 B& i. y( J. b8 R: R8 N对每层数据都校验,有个应用的地方就是中间层和数据层的复用。从复用的角度来说,如果中间层有校验,那么在写表现层时排查错误,处理异常就会相对比较方便。不过我遇到的这种场景情况很少。
/ ]. {: D5 j- x8 d. y* L9 {+ S' x3 s4 Q
一般的应用我觉得数据库的内生校验加上表现层的校验,应该基本上足够了。程序能卖钱是因为程序能WORK,而不是因为检测的代码写得多。
5 n' r  e0 G) r0 Q$ q& R( o- X- @4 Q: E2 d  w
' P6 j! j5 N9 K- c5 T4 [
3 L& _* t* I6 ~0 ^

3 |5 ~% A2 }0 k5 H
作者: 大黑蚊子    时间: 2011-9-28 12:46
前Cobol程序员飘过~
作者: 明月回春    时间: 2011-9-28 12:56
。。。  F+ N9 c8 m! `  k9 n3 I
我是来重在参乎的9 G9 K6 F% }$ N! D4 N3 ]* h" o7 S

作者: 老兵帅客    时间: 2011-9-28 17:13
本帖最后由 老兵帅客 于 2011-9-28 04:13 编辑 / b, [- l- b8 ~% U# Y
四处张望 发表于 2011-9-27 22:32
1 R( c6 s) G" N% X0 |& W1 v4 Uesb那个如果不是全是自己搞,不好这么算,用效率和实效的角度考虑防止扯皮是想不透的。
/ _! H% [5 S% ~- g& a第一个问题其实也是 ...
- z: d5 ~$ T; {  M) [  O/ ?& d

4 G0 |, U8 Y0 C' |9 lesb那个全是自己搞的,而且预先知道就放在自己的内部机器上。9 P; A$ B9 R* K, U
1 |0 t' o3 l3 S3 D1 d% ~

作者: 老兵帅客    时间: 2011-9-28 17:18
空气精灵 发表于 2011-9-27 22:50 $ U' E( @7 R. W5 P
个人认为, 每一层的检验是必要的,但是,重点应该在于本层所生成的数据,而不是检查前一层送来的数据.! Q$ S8 ^9 e; S
也就是 ...

' }- p) C* S1 r+ y% _嘿嘿,你说的是检测自身的数据而不是前层传递来的数据,这是design by contract的概念,也就是pre-condition。我文中所说的是每一层都重复检测前层的数据,这就是另外一种思路了,没有pre-condition而是边界之外是险恶的世界。
作者: 老兵帅客    时间: 2011-9-28 17:21
mark 发表于 2011-9-27 23:09 7 X7 s# e, b- P  a% ]
老兵说得很有道理的。不过这个还是要看放在什么应用环境下。
6 ?# C, _4 r3 K9 x. n4 k; k* c+ B: z' k0 L+ S  ^& z+ z
对每层数据都校验,有个应用的地方就是中间层 ...

! l6 U* I  \9 w/ ~! @9 H" Z我的想法是每层有各自的任务,重复检测没有意义。
作者: 胖子    时间: 2011-9-28 17:33
老兵提到的问题,是不是有一个前提:各层校验的对象是一致的?既从逻辑上来说,数据在各层次间流动时,不发生改变。
* @! O4 v8 ^; ]) D% {4 z
& s, c' v! f- B' c如果是这样的话,倒确实不用每层都校验。而应把关注点放在数据传递安全上,也就是防篡改。- a6 n( f: K8 J* f, a4 F5 |' O

$ L* ~3 x: v: G- I+ E如果数据流动过程中会变动,那我同意空气精灵的观点。
作者: 四处张望    时间: 2011-9-28 17:41
老兵帅客 发表于 2011-9-28 17:13 " V0 T- o% a* U9 `
esb那个全是自己搞的,而且预先知道就放在自己的内部机器上。
% k% N( w( M6 n. E
理解不能,除非ssl这类都是缺省实现,懒得去掉,否则多个ssl多讨厌。
作者: 老兵帅客    时间: 2011-9-28 19:01
胖子 发表于 2011-9-28 04:33 # k* N* i* X- v: M; D) ~
老兵提到的问题,是不是有一个前提:各层校验的对象是一致的?既从逻辑上来说,数据在各层次间流动时,不发 ...

( z% }9 R" y* y各层的校验数据是一样的,就是从表示层那里得到的同一个java bean,内容不变。同时因为这是个在同一个java ee server下面运行的web app,不存在数据在中间遭到篡改的可能。
作者: 老兵帅客    时间: 2011-9-28 19:02
四处张望 发表于 2011-9-28 04:41 ( X5 N" T% y' r: u- C
理解不能,除非ssl这类都是缺省实现,懒得去掉,否则多个ssl多讨厌。

" F, Z  d1 P9 d: }" `  Z不是的,ssl设置都是要单独做的,而且还是双向ssl,也就是双方互相验证再建立ssl。
作者: 四处张望    时间: 2011-9-29 09:52
老兵帅客 发表于 2011-9-28 19:02 4 U& Q$ D/ c4 w3 {6 U3 W8 N
不是的,ssl设置都是要单独做的,而且还是双向ssl,也就是双方互相验证再建立ssl。 ...
  N; _, L. P$ i) }" e4 c
这个不就是等于保险箱里面再加吧锁吗,追求小数点后面的几个0呢?
作者: 老兵帅客    时间: 2011-9-29 09:59
四处张望 发表于 2011-9-28 20:52
& i. F# U# w' h. O  t& u这个不就是等于保险箱里面再加吧锁吗,追求小数点后面的几个0呢?

" q) j  F2 ?% _/ a4 d2 `没办法,安全这个领域太敏感了,多些安全总比少些强
作者: 四处张望    时间: 2011-9-29 10:14
老兵帅客 发表于 2011-9-29 09:59
1 v( i7 N; u; l9 }没办法,安全这个领域太敏感了,多些安全总比少些强
* |0 [/ O' P0 |6 |
不过计算性能开始不值钱了,多点安全拖累性能无所谓,不要多人工就好。
作者: 猫元帅    时间: 2011-9-30 08:47
专业词汇一个不懂,但是意思大概明白了。, F$ x4 g% K- K: j% X

5 E; G7 g# J9 h: J" J就是帅克同志认为在1-2-3递进的情况下,2和3不会发生超出1的BUG。所以只要1做得完善,检测1就足够了,用同样的方法检测2和3是一种浪费。不能为了检测而人为改变1的设置,因为1-2-3是递进的关系。
% B! l9 i& t* _: O2 |- W: K
# [9 p; J/ `3 i  Y" r) ~' ]简单说就是不能为了检测而检测。
作者: 老兵帅客    时间: 2011-9-30 09:16
猫元帅 发表于 2011-9-29 19:47
% s  t6 Z$ t6 ?# ~6 T专业词汇一个不懂,但是意思大概明白了。
8 I- n$ J. O# j5 k2 Z: q7 g! s) E9 b8 F& T6 w' u' ^
就是帅克同志认为在1-2-3递进的情况下,2和3不会发生超出1的BU ...
! W+ ~8 k1 L! `# l- ^$ [
对,不应该做多余的事情
作者: ImaNut    时间: 2011-9-30 21:46
小绿爷 发表于 2011-9-27 22:17
* E& l2 S* v1 \/ _! O9 ?/ b- T; K隔行如隔山,对我而言基本看不懂

! V. l: G! p% L! {/ j& f就好比一座办公楼,大门口一把门的,电梯一守卫,你办公室门口又是一位,连厕所那儿也摆一位,进出都查ID。理由是有人能钻窗户进来。
作者: 老兵帅客    时间: 2011-9-30 22:40
ImaNut 发表于 2011-9-30 08:46
4 e6 P; I) p( T' T就好比一座办公楼,大门口一把门的,电梯一守卫,你办公室门口又是一位,连厕所那儿也摆一位,进出都查ID ...

. _! n$ o) {1 T6 G$ |0 N& z" i( o# B问题是这大楼根本没窗户也要这么干,那就是多此一举了。
作者: 牌牌    时间: 2011-10-1 17:01
作为一个前C++程序员表示理解起来压力不大。% ^9 J6 \- f% c- U2 U9 f1 R
现在的软件工程为了提高代码的重用性和可靠性,要求各个代码模块对所有的输入都进行合法性检查以保证业务逻辑的正确运行,所以CPU内存增长的再快,也不扛不住做总是在做无用功的软件啊。
作者: 老兵帅客    时间: 2011-10-1 20:29
牌牌 发表于 2011-10-1 04:01
" X% n6 b$ I! p' f- E( v作为一个前C++程序员表示理解起来压力不大。6 d+ u6 v+ ^+ F' D) r
现在的软件工程为了提高代码的重用性和可靠性,要求各个代码模 ...
8 n& I; i" t  P8 e) k
的确如此。
作者: ekid    时间: 2011-10-1 21:10
怎么软件也像协议分层吗?
作者: sky100    时间: 2011-10-1 23:55
看你怎么看这个问题了。现代的软件工程都是多人甚至多团队合作型,万一其中的一个模块外包到印度去,那边的开发人员乱写一气,污染了数据,然后下一级别的模块没有做数据效验怎么办?现实世界中总是有各种意外的。当时觉得没必要的事情,过几年之后可能会觉得是重要的。
1 K1 C- G, }3 t
8 ?* g4 }- _4 {! \: f. p从架构设计的角度来说,这样做对于扩展性很有好处。比如,现在你只用一台机器跑所有的web service.可是明天用户忽然增多,一台机器撑不住了,必须多台机器集群作战。这时这样做的好处就出来了,软件层面基本上不用作修改就可以分布到多台机器上用。如果象你想的那样内部通讯不需要安全验证,那么扩展起来还需要重新作安全验证,这样又会从另一个方面来增加工作量。是机器便宜还是开发人员的工资便宜呢?Really depends.: c1 j5 F, P' \' N

1 L, k* {  K* D$ j4 R% G很多时候设计决策本身就是一个trade off.
* u' A7 G1 f; Z8 [) B0 V; h6 K
1 Q9 ^% P# M# F4 V

作者: 老兵帅客    时间: 2011-10-2 04:13
ekid 发表于 2011-10-1 08:10 " V0 Q* \: d/ }/ U3 A
怎么软件也像协议分层吗?

# t* X7 h  ^- g: U是啊,一直都是这样做的
作者: 老兵帅客    时间: 2011-10-2 04:15
sky100 发表于 2011-10-1 10:55 1 [6 o& o2 Q! z7 H
看你怎么看这个问题了。现代的软件工程都是多人甚至多团队合作型,万一其中的一个模块外包到印度去,那边的 ...

! h3 k3 @) s0 B' D  c4 n第一。测试是干什么的?% P& E- e) w! n7 w

3 `0 r" D) d+ N# N+ p) q6 p. a第二。如果那堆web service根本不可能被deploy到外网呢?
( }+ ~2 B( d) q" f( U! }) s" \1 U* m, G- }
我明白你的意思,但是这个trade off理论上很合理,现实中则根本没有得益的时候,而成本却肯定在那里。
作者: 一瞬无尽    时间: 2011-10-2 17:53
这种每层都验证数据的做法我觉得没错5 e0 L% `. ^: X- A. C1 k
测试的做法我觉得似乎可以改进:通过修改下层的实际代码进行测试,这似乎过分了些5 y, m+ q0 |. B( k
我不了解实际情况,觉得似乎可以干脆另写测试代码,模拟下层专门发送错误数据给上层,不然每次测试都修改生产代码,太麻烦太浪费了
6 R& |" ?& k5 y: e6 O, T
$ l% w) n3 X# e" _我如果是上层写代码的,宁愿自己写这个测试也说不定,当然能安排给下层是最好了
作者: 老兵帅客    时间: 2011-10-2 18:56
一瞬无尽 发表于 2011-10-2 04:53 6 r1 h- m* k9 `7 [0 H0 {9 A2 l
这种每层都验证数据的做法我觉得没错: O& l+ k+ m9 |& |6 v( i
测试的做法我觉得似乎可以改进:通过修改下层的实际代码进行测试,这 ...

' ~) R8 ?* M! YGood, you do that
作者: 老兵帅客    时间: 2011-10-2 20:51
一瞬无尽 发表于 2011-10-2 04:53
8 `  s& c  I" k7 ^这种每层都验证数据的做法我觉得没错
& W" p; j4 c1 V8 t5 f测试的做法我觉得似乎可以改进:通过修改下层的实际代码进行测试,这 ...
) k: ~" j1 ^1 {1 h4 _  l
其实说起来,这个就看怎么做了,做得好的话是可以灵活配置的,也就是需要的话enable检测代码,否则disable掉就是。具体说来就是利用framework的能力,例如struts2的interceptor,可以做出几乎不带来额外开销而非常实用的检测程序来。
作者: sky100    时间: 2011-10-3 05:34
本帖最后由 sky100 于 2011-10-3 05:46 编辑
- J, C' {2 ?; O( p" R- k/ v/ v% @4 b
老兵帅客 发表于 2011-10-2 04:15
" E/ N3 }7 B7 o# K第一。测试是干什么的?
/ v; r9 h' i' C% ]7 P& c
( ]6 V7 b# d4 W9 s5 _' j5 T: l第二。如果那堆web service根本不可能被deploy到外网呢?

3 q, T! `( a. z' P; i2 a# W- C# R, D
第一,绝大多数测试不可能覆盖所有的可能性。如果代码测试后放到生产环境中,结果因为某个特殊的情况,数据效验没有做而导致出了问题。应该是没有听从架构师要求去添加效验的开发人员的错,还是测试人员的错呢?" J* {8 K2 {( Q9 v
% F4 @' A# k6 _. V* [% z8 j% T
第二,我的看法是,除非公司的ceo拍胸脯给打保票,否则你never know.商业需求总是在不断变化的。从架构设计的角度,假设你是架构师,你是宁肯多加些冗余来保证系统的鲁棒性和可扩展性呢?还是为了减少开发人员的7 x6 C# d/ |3 c/ V1 f" n/ J+ K3 b1 T! D
工作量并给人力资源部制造裁员的借口而不重复校验呢?" m& N1 B, H& `0 q

) p' ]7 x) p$ N" V$ {4 r6 g$ @老兵兄,你所提到的事情设计者未必没有想到,只不过他可能得到的信息和考虑的可能性要比你多,权衡之下采取的这个决策。而有些信息和可能性不适合公开讨论而已。换句话说,很多问题之所以不可以使用简单直接的方案是因为这个问题不仅仅是技术问题而且也是一个政治问题:)
5 [8 v0 n7 c/ ^" g* B. _- J4 y
& X2 `7 X/ b6 i' b7 I; O我个人的一点陋见,搏大家一笑,请轻拍:)
; ?1 U* X6 N' r  h, G5 K( {
) X$ K  |2 @# W' Q0 U5 `0 j
( \, q/ U7 ]0 L
4 e* `* r5 e# j
' }9 H) W. z3 ]5 a8 w
' A; z& e) `: @/ O$ }# x% U+ z4 r

作者: 老兵帅客    时间: 2011-10-3 05:40
sky100 发表于 2011-10-2 16:34
1 c4 j' p, ?; O% c" @/ {第一,绝大多数测试不可能覆盖所有的可能性。如果代码测试后放到生产环境中,结果因为某个特殊的情况,数 ...

1 c" {" s$ d' H3 w, }: U3 m说了这么多,其实很简单,决策者在逃避责任而不是保证质量与效率。因为重复的检测不会提高质量而却会增加开销和降低性能,但是在出了问题推诿的时候,那就是个优点了,因此这不是技术人而是政客考虑的事情。
* r+ _9 O' g) h: W3 X) C+ G, h+ V3 q8 M$ i
这里的关键在于你所说的那些可能性在现实中几乎不可能出现,而成本却是必然而无法减免的,这样有成本而无收益的把戏除了出于政治需要谁会喜欢?4 `+ R! M) W) a1 ?, }) `

- U9 u5 A2 V! \3 _. t( ?8 i再多就变成政治扯淡了,到此为止吧。
作者: wolfsquare    时间: 2011-10-3 08:46
看来楼主并不明白什么叫最佳实践
作者: sharepoint    时间: 2011-10-3 14:11
其实,说到底就是一个权衡的问题
6 d0 e7 E  n, E; C1 t% m. t1:如果一个系统重要到影响到公司的生死存亡,面面俱到,行万全之道不算为过& Y! N) c, c: f2 q
2:如果预算允许,多做一点检查也不错" G/ A- f# m9 L- ]
3:如果用户需求没有要求,架构师加冗余来保证系统的鲁棒性和可扩展性,就有点画蛇添足。
+ L& s# j( Y" X# C5 l6 k, s& `4:Best Practice和Guideline,SOP还是有差别的。
7 i- i' \" H6 e' G& N7 X6 V! Y5:很多情况,不是技术决策,而是管理决策。
作者: 老兵帅客    时间: 2011-10-3 19:57
sharepoint 发表于 2011-10-3 01:11
& }6 p+ c) f0 x其实,说到底就是一个权衡的问题! c" H$ @% O' m: q( u6 \
1:如果一个系统重要到影响到公司的生死存亡,面面俱到,行万全之道不算为 ...
( L9 W0 c; m* v+ B! s3 H6 }4 L
right, right
作者: 老兵帅客    时间: 2011-10-5 06:22
说一下我为什么写这篇东西吧。
$ s/ U% q/ ]1 Z: |0 P$ F" N4 O
3 f. A% M9 m0 g# q' O: ~; [2 l" v各位的回复我都看了,道理上完全对,但是现实中就不一定了,为什么,听我说哈。
) {% \: p' z5 A) |3 B  r
. t* R/ ?- p- c% w" o我现在的项目组,来了位高人,动辄Best Practice,一套一套地,什么framework跟什么类库搭配,都说得很清楚。只有一个问题,大家都知道那些东西不能搁在一起滴,否则会有版本不兼容问题,而公司又不允许未经充分测试的修改版投入使用,于是真要用的话就只能是一塌糊涂喽,而这位不知道,还在那里狂侃。可是老板还信他,要求大家听他的,于是大家就难受吧,因为根本就配不通,更不用说具体去用了。( x) v2 h* R& m/ |2 {

  s5 G) m- ^$ a" ?* g我们这里有一位狠主在给他挖坑,我们看着,谁也不说话,就等着开壶那天看热闹。3 d5 a9 u3 A3 o2 U

- o  B0 @3 ]3 o当然了,这位高人叫嚣的可不是我上面写的那点东西,充分的模块测试、重复的安全设置对他来说太小儿科了,显不出他的水平。那么干的都是些庸人,人家根本看不上滴,人家要干就干大的,或者一家伙把自己臭大街完事。
作者: mark    时间: 2011-10-5 16:44
老兵帅客 发表于 2011-10-5 06:22 ( \5 n# [2 u/ h# Q5 h
说一下我为什么写这篇东西吧。$ a# j  A( I& Z0 O

1 a( s+ K2 C3 l7 }0 ]1 v( |各位的回复我都看了,道理上完全对,但是现实中就不一定了,为什么,听我说 ...
5 M* B9 f1 _4 G$ \- z
最恨这些纸上谈兵的家伙。
1 p& ^  \+ W3 Y5 P' a6 A3 k+ ~( W! \7 }, Z; ?" P
我原来公司有两个家伙忽悠老板引入RATIONAL ROSE做项目,把大家搞得苦不堪言。最后项目没做好,那两个家伙倒是长了经验值,直接跳槽走人。
作者: Radiohead    时间: 2011-10-5 23:40
老兵帅客 发表于 2011-9-28 17:21
! |) M# T2 c( {* q我的想法是每层有各自的任务,重复检测没有意义。
4 x* G+ [# I* Q7 P3 T2 K
认同。 讨厌重复的代码,讨厌重复的逻辑。UI层尽量少的biz logic。




欢迎光临 爱吱声 (http://aswetalk.net/bbs/) Powered by Discuz! X3.2