设为首页收藏本站

爱吱声

 找回密码
 注册
搜索
查看: 14986|回复: 47
打印 上一主题 下一主题

[信息技术] Best Practice

  [复制链接]
  • TA的每日心情
    开心
    2023-1-5 00:48
  • 签到天数: 2591 天

    [LV.Master]无

    跳转到指定楼层
    楼主
    发表于 2011-9-27 22:11:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    这里干软件开发,经常会遇到迷信Best Practice的家伙,一说起来什么都要遵循这个,否则就要不依不饶跟你扯,实在是烦人啊。; [# o, \# ?' k
    $ X# T7 |# l7 }8 [
    举个例子,一个web应用,给分成了presentation layer, business layer, data access layer等等。这个分法倒是很合理,问题是人家认为数据的校验也是每层都要做的,理由是各层都有可能被替换,你如果不做如何保证数据是符合要求的?很对,但是实践中就有很多问题不好办了,问题出在了测试上。1 n2 t5 S$ z, A5 u

    % g, x, c4 P# M* Z( X" ?7 i9 h% e具体说来是这样的,presentation layer包括浏览器部分和服务器的对应接口部分,前者的校验用javascript而后者用java,这就是两层测试了,再加上business layer的那层,起码就是三层了。这三层测试所做的工作,或者说所依据的规则一般是一样的,因为就是一个java bean在那里传输数据嘛。可是问题是如果第一层已经做的完善了,第二层又怎么可能检测出问题来呢,因为可能的错误已经都在第一层被发现了嘛,于是为了让第二层检测能够工作,你必须关掉第一层检测,这意味着修改代码,而任何修改都意味着可能带来新的bug,这个怎么检测?第二层和第三层之间的问题跟前面是一样的,也就是你必须关掉第二层的检测来让第三层的检测有机会干活,这里同样存在前述的可能带来新的bug问题,同时这三层检测在交付以后需要同时存在重复检测,这开销怎么算?
    6 I9 F" W0 j3 x8 S3 X( d% d$ \  F
    - l" i' I3 ]8 q  x) G  v* f有人可能会说,那是必要的代价,因为各层都有可能被替换,因此各层自己的检测是必不可少的。理论上这话完全对,可是现实中几乎不存在替换的可能,因为那意味着整体结构的大修改,即使出现这样的情况,交付以后的其他各层检测还是没机会干活的。于是一个看起来完美的方案,现实中只是在浪费资源而已,因为同样的数据要被检测三次,而只有第一次有可能被检测出问题来,后面那两个都是白忙乎。
    3 \, c: T' w& u2 U+ |5 w0 a
    3 `! c5 O+ X! s9 G2 @. g这方面的另外一个例子就是ESB领域,这个领域的用户普遍都是些大用户,具体实践就是一大堆的web service在那里以workflow的方式运行,这点没问题,问题是每个web service的设置都有着全套的安全规范,例如双向SSL和WS-SECURITY之类的,哪怕是这堆web service都运行在同一台逻辑机器上也一样,于是就是大量的开销却没换来任何安全上改进。
  • TA的每日心情
    慵懒
    2016-4-2 21:31
  • 签到天数: 30 天

    [LV.5]元婴

    沙发
    发表于 2011-9-27 22:17:30 | 只看该作者
    隔行如隔山,对我而言基本看不懂
  • TA的每日心情
    开心
    2023-1-5 00:48
  • 签到天数: 2591 天

    [LV.Master]无

    板凳
     楼主| 发表于 2011-9-27 22:43:07 | 只看该作者
    小绿爷 发表于 2011-9-27 09:17 8 @. O3 U" P$ F
    隔行如隔山,对我而言基本看不懂
    $ j# g! L0 d; {( w' p  e  d$ J
    没关系,重在参与嘛

    该用户从未签到

    地板
    发表于 2011-9-27 23:32:49 | 只看该作者
    同意一楼意见。。。. }+ Z5 x4 E2 j& p' x+ u/ H! O
    囧,什么都没看懂。。哈哈
  • TA的每日心情
    开心
    2023-1-5 00:48
  • 签到天数: 2591 天

    [LV.Master]无

    5#
     楼主| 发表于 2011-9-27 23:33:51 | 只看该作者
    旅途愉快 发表于 2011-9-27 10:32 ( n4 I! _' Q+ T/ l9 y; y. F
    同意一楼意见。。。/ ^8 r. h/ u. f8 f3 `3 a( |" e
    囧,什么都没看懂。。哈哈

    - W+ Q6 M( y9 t; Z' q2 j9 K又是一个重在参与地
  • TA的每日心情
    开心
    2024-11-19 08:25
  • 签到天数: 516 天

    [LV.9]渡劫

    6#
    发表于 2011-9-27 23:49:47 | 只看该作者
    我家倒是有本书,Thinking in JAVA,是LD的,不过她现在在搞ORACLE。。。
  • TA的每日心情
    开心
    2023-1-5 00:48
  • 签到天数: 2591 天

    [LV.Master]无

    7#
     楼主| 发表于 2011-9-27 23:51:11 | 只看该作者
    tonyxu 发表于 2011-9-27 10:49 + M* D$ Z$ |3 A9 ^
    我家倒是有本书,Thinking in JAVA,是LD的,不过她现在在搞ORACLE。。。
    " Y" ~; a  K. G& d+ s# @, t& J
    还是个重在参与地
  • TA的每日心情
    开心
    2024-11-19 08:25
  • 签到天数: 516 天

    [LV.9]渡劫

    8#
    发表于 2011-9-27 23:53:00 | 只看该作者
    老兵帅客 发表于 2011-9-27 23:51
    / |* k2 V3 G# g6 k' B还是个重在参与地

    % Q3 f4 m; }* E7 g: Y# Q" babsolutely...
  • TA的每日心情
    开心
    2018-12-31 23:52
  • 签到天数: 4 天

    [LV.2]筑基

    9#
    发表于 2011-9-27 23:54:17 | 只看该作者
    不懂,坐等懂的人来谈。
  • TA的每日心情
    开心
    2023-1-5 00:48
  • 签到天数: 2591 天

    [LV.Master]无

    10#
     楼主| 发表于 2011-9-28 00:00:50 | 只看该作者
    飞翔的芦苇 发表于 2011-9-27 10:54
    2 U' N) P& G+ \/ Z; e不懂,坐等懂的人来谈。

    - t; b5 t6 ~' j怎么就剩下重在参与的了,干这行的都哪里去了?

    点评

    我懂RT-PCR,:),计算机很小白,要不就去做生物信息学去了,这个方向火得很。  发表于 2011-9-28 09:17

    该用户从未签到

    11#
    发表于 2011-9-28 07:11:54 | 只看该作者
    软件中检测部门大部分都是女性吧,华为的软件研发我很清楚,全球采购便宜的,再加上核心数据集成。
  • TA的每日心情
    开心
    2023-1-5 00:48
  • 签到天数: 2591 天

    [LV.Master]无

    12#
     楼主| 发表于 2011-9-28 07:58:30 | 只看该作者
    fareast 发表于 2011-9-27 18:11
    . @0 @  X$ N* l5 e2 ^% Z软件中检测部门大部分都是女性吧,华为的软件研发我很清楚,全球采购便宜的,再加上核心数据集成。 ...

    : ], u9 M- M7 X5 a0 o你说的是做QA的,我说的是软件开发过程中写的检测程序,两回事。
  • TA的每日心情
    慵懒
    2026-2-25 18:51
  • 签到天数: 1670 天

    [LV.Master]无

    13#
    发表于 2011-9-28 11:32:07 | 只看该作者
    esb那个如果不是全是自己搞,不好这么算,用效率和实效的角度考虑防止扯皮是想不透的。
    / d1 D# y0 D. b+ x第一个问题其实也是两说,就是不知道这么提倡的家伙是从哪个角度考虑了。
  • TA的每日心情

    2016-9-18 00:11
  • 签到天数: 285 天

    [LV.8]合体

    14#
    发表于 2011-9-28 11:50:29 | 只看该作者
    个人认为, 每一层的检验是必要的,但是,重点应该在于本层所生成的数据,而不是检查前一层送来的数据.
    2 d5 T4 Z8 W! [5 u也就是说,需要假设,前一layer/flow送来的数据都是准确的.( d7 M7 `4 {) c( r/ [
    当然,必要的入口参数exception还是需要设一下的.如果真的发生了exception,那么可以推论是前一layer/flow出错了,让前一层自己去查吧.
  • TA的每日心情

    2024-2-11 13:31
  • 签到天数: 141 天

    [LV.7]分神

    15#
    发表于 2011-9-28 12:09:28 | 只看该作者
    老兵说得很有道理的。不过这个还是要看放在什么应用环境下。
    4 ~6 t( ]# t8 z/ g8 d. n
    - N5 ?/ z' h4 \4 G1 A; {对每层数据都校验,有个应用的地方就是中间层和数据层的复用。从复用的角度来说,如果中间层有校验,那么在写表现层时排查错误,处理异常就会相对比较方便。不过我遇到的这种场景情况很少。
    9 ~. O1 a* |) P) A/ J9 F) }/ K  e. {+ X* r
    一般的应用我觉得数据库的内生校验加上表现层的校验,应该基本上足够了。程序能卖钱是因为程序能WORK,而不是因为检测的代码写得多。
    * W% @* B& F% \% \$ m6 i3 N1 L
    0 B' ^& @5 Z5 `! K4 e1 P. U2 {. F8 a; q

    ' @" e" C! ?6 q: e# I  a$ C1 Q- q, e# q% _
  • TA的每日心情
    擦汗
    2026-3-17 22:01
  • 签到天数: 1133 天

    [LV.10]大乘

    16#
    发表于 2011-9-28 12:46:46 | 只看该作者
    前Cobol程序员飘过~

    点评

    肯定是这样的,电影里面的黑客和银行核心系统开发人员完全是两类人。  发表于 2011-9-28 17:23
    俺离开那行已经很久了,估计现在一行代码都写不出来廖~ 有空写一下银行核心系统开发的事儿,木有电影里写的那么牛掰~  发表于 2011-9-28 15:01
    银行啊,银行啊,这个我都知道的。  发表于 2011-9-28 14:56
    你就没不小心给程序留个后门,每天每人往你家账户上转个0.01.... :P  发表于 2011-9-28 14:42
    啥大钱?那些数字在俺眼前就是浮云~  发表于 2011-9-28 13:08
  • TA的每日心情
    慵懒
    2019-6-5 13:01
  • 签到天数: 115 天

    [LV.6]出窍

    17#
    发表于 2011-9-28 12:56:28 | 只看该作者
    。。。; d# X2 x/ Y9 k, B3 ^( r
    我是来重在参乎的
    ; W6 p/ i+ u( V* k3 i3 o; g
  • TA的每日心情
    开心
    2023-1-5 00:48
  • 签到天数: 2591 天

    [LV.Master]无

    18#
     楼主| 发表于 2011-9-28 17:13:09 | 只看该作者
    本帖最后由 老兵帅客 于 2011-9-28 04:13 编辑
    5 @+ ~0 Z' m1 B$ E% |
    四处张望 发表于 2011-9-27 22:32 . D& Q1 C& E) |) p
    esb那个如果不是全是自己搞,不好这么算,用效率和实效的角度考虑防止扯皮是想不透的。5 K. `% m+ R1 C8 D# E: V
    第一个问题其实也是 ...

    6 m  ]+ U. b4 e$ G  L1 F, E
    ) _  a1 F9 b# E; V1 vesb那个全是自己搞的,而且预先知道就放在自己的内部机器上。" F( ~2 G$ F, q2 {$ o1 R& S% u5 ]  M+ ]
      u0 ?) l0 I' I# ]1 F
  • TA的每日心情
    开心
    2023-1-5 00:48
  • 签到天数: 2591 天

    [LV.Master]无

    19#
     楼主| 发表于 2011-9-28 17:18:13 | 只看该作者
    空气精灵 发表于 2011-9-27 22:50 8 k: K  r  @/ k9 W, y0 J
    个人认为, 每一层的检验是必要的,但是,重点应该在于本层所生成的数据,而不是检查前一层送来的数据.
    % `  H7 F7 j* O2 s* A' R" I也就是 ...
    6 l9 x4 |7 W$ |6 r, M
    嘿嘿,你说的是检测自身的数据而不是前层传递来的数据,这是design by contract的概念,也就是pre-condition。我文中所说的是每一层都重复检测前层的数据,这就是另外一种思路了,没有pre-condition而是边界之外是险恶的世界。

    点评

    所以才说没意义啊.疑犯要从无 :)  发表于 2011-9-28 17:30
  • TA的每日心情
    开心
    2023-1-5 00:48
  • 签到天数: 2591 天

    [LV.Master]无

    20#
     楼主| 发表于 2011-9-28 17:21:53 | 只看该作者
    mark 发表于 2011-9-27 23:09
    ' H0 C) Z3 @3 {& g老兵说得很有道理的。不过这个还是要看放在什么应用环境下。  p8 t% r  m& }7 R+ _) X/ J7 L
    1 S; ?5 n  l% Q* C% W  U7 ?+ ~. s
    对每层数据都校验,有个应用的地方就是中间层 ...

    3 X2 h: M4 Y, j/ A6 Q. a我的想法是每层有各自的任务,重复检测没有意义。

    点评

    谢谢  发表于 2011-10-6 12:06
    赞同  发表于 2011-10-6 11:54

    手机版|小黑屋|Archiver|网站错误报告|爱吱声   

    GMT+8, 2026-8-30 22:46 , Processed in 0.069056 second(s), 18 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表