老兵帅客 发表于 2011-9-27 22:11:04

Best Practice

这里干软件开发,经常会遇到迷信Best Practice的家伙,一说起来什么都要遵循这个,否则就要不依不饶跟你扯,实在是烦人啊。

举个例子,一个web应用,给分成了presentation layer, business layer, data access layer等等。这个分法倒是很合理,问题是人家认为数据的校验也是每层都要做的,理由是各层都有可能被替换,你如果不做如何保证数据是符合要求的?很对,但是实践中就有很多问题不好办了,问题出在了测试上。

具体说来是这样的,presentation layer包括浏览器部分和服务器的对应接口部分,前者的校验用javascript而后者用java,这就是两层测试了,再加上business layer的那层,起码就是三层了。这三层测试所做的工作,或者说所依据的规则一般是一样的,因为就是一个java bean在那里传输数据嘛。可是问题是如果第一层已经做的完善了,第二层又怎么可能检测出问题来呢,因为可能的错误已经都在第一层被发现了嘛,于是为了让第二层检测能够工作,你必须关掉第一层检测,这意味着修改代码,而任何修改都意味着可能带来新的bug,这个怎么检测?第二层和第三层之间的问题跟前面是一样的,也就是你必须关掉第二层的检测来让第三层的检测有机会干活,这里同样存在前述的可能带来新的bug问题,同时这三层检测在交付以后需要同时存在重复检测,这开销怎么算?

有人可能会说,那是必要的代价,因为各层都有可能被替换,因此各层自己的检测是必不可少的。理论上这话完全对,可是现实中几乎不存在替换的可能,因为那意味着整体结构的大修改,即使出现这样的情况,交付以后的其他各层检测还是没机会干活的。于是一个看起来完美的方案,现实中只是在浪费资源而已,因为同样的数据要被检测三次,而只有第一次有可能被检测出问题来,后面那两个都是白忙乎。

这方面的另外一个例子就是ESB领域,这个领域的用户普遍都是些大用户,具体实践就是一大堆的web service在那里以workflow的方式运行,这点没问题,问题是每个web service的设置都有着全套的安全规范,例如双向SSL和WS-SECURITY之类的,哪怕是这堆web service都运行在同一台逻辑机器上也一样,于是就是大量的开销却没换来任何安全上改进。

小绿爷 发表于 2011-9-27 22:17:30

隔行如隔山,对我而言基本看不懂:D

老兵帅客 发表于 2011-9-27 22:43:07

小绿爷 发表于 2011-9-27 09:17 static/image/common/back.gif
隔行如隔山,对我而言基本看不懂

没关系,重在参与嘛:dizzy:

旅途愉快 发表于 2011-9-27 23:32:49

同意一楼意见。。。
囧,什么都没看懂。。哈哈

老兵帅客 发表于 2011-9-27 23:33:51

旅途愉快 发表于 2011-9-27 10:32 static/image/common/back.gif
同意一楼意见。。。
囧,什么都没看懂。。哈哈

又是一个重在参与地:dizzy:

tonyxu 发表于 2011-9-27 23:49:47

我家倒是有本书,Thinking in JAVA,是LD的,不过她现在在搞ORACLE。。。

老兵帅客 发表于 2011-9-27 23:51:11

tonyxu 发表于 2011-9-27 10:49 static/image/common/back.gif
我家倒是有本书,Thinking in JAVA,是LD的,不过她现在在搞ORACLE。。。

还是个重在参与地;P

tonyxu 发表于 2011-9-27 23:53:00

老兵帅客 发表于 2011-9-27 23:51 static/image/common/back.gif
还是个重在参与地

absolutely...:P

飞翔的芦苇 发表于 2011-9-27 23:54:17

不懂,坐等懂的人来谈。

老兵帅客 发表于 2011-9-28 00:00:50

飞翔的芦苇 发表于 2011-9-27 10:54 static/image/common/back.gif
不懂,坐等懂的人来谈。

怎么就剩下重在参与的了,干这行的都哪里去了?:dizzy:

fareast 发表于 2011-9-28 07:11:54

软件中检测部门大部分都是女性吧,华为的软件研发我很清楚,全球采购便宜的,再加上核心数据集成。

老兵帅客 发表于 2011-9-28 07:58:30

fareast 发表于 2011-9-27 18:11 static/image/common/back.gif
软件中检测部门大部分都是女性吧,华为的软件研发我很清楚,全球采购便宜的,再加上核心数据集成。 ...

你说的是做QA的,我说的是软件开发过程中写的检测程序,两回事。

四处张望 发表于 2011-9-28 11:32:07

esb那个如果不是全是自己搞,不好这么算,用效率和实效的角度考虑防止扯皮是想不透的。
第一个问题其实也是两说,就是不知道这么提倡的家伙是从哪个角度考虑了。

空气精灵 发表于 2011-9-28 11:50:29

个人认为, 每一层的检验是必要的,但是,重点应该在于本层所生成的数据,而不是检查前一层送来的数据.
也就是说,需要假设,前一layer/flow送来的数据都是准确的.
当然,必要的入口参数exception还是需要设一下的.如果真的发生了exception,那么可以推论是前一layer/flow出错了,让前一层自己去查吧.

mark 发表于 2011-9-28 12:09:28

老兵说得很有道理的。不过这个还是要看放在什么应用环境下。

对每层数据都校验,有个应用的地方就是中间层和数据层的复用。从复用的角度来说,如果中间层有校验,那么在写表现层时排查错误,处理异常就会相对比较方便。不过我遇到的这种场景情况很少。

一般的应用我觉得数据库的内生校验加上表现层的校验,应该基本上足够了。程序能卖钱是因为程序能WORK,而不是因为检测的代码写得多。




大黑蚊子 发表于 2011-9-28 12:46:46

前Cobol程序员飘过~

明月回春 发表于 2011-9-28 12:56:28

。。。
我是来重在参乎的
{:226:}

老兵帅客 发表于 2011-9-28 17:13:09

本帖最后由 老兵帅客 于 2011-9-28 04:13 编辑

四处张望 发表于 2011-9-27 22:32 static/image/common/back.gif
esb那个如果不是全是自己搞,不好这么算,用效率和实效的角度考虑防止扯皮是想不透的。
第一个问题其实也是 ...

esb那个全是自己搞的,而且预先知道就放在自己的内部机器上。

老兵帅客 发表于 2011-9-28 17:18:13

空气精灵 发表于 2011-9-27 22:50 static/image/common/back.gif
个人认为, 每一层的检验是必要的,但是,重点应该在于本层所生成的数据,而不是检查前一层送来的数据.
也就是 ...

嘿嘿,你说的是检测自身的数据而不是前层传递来的数据,这是design by contract的概念,也就是pre-condition。我文中所说的是每一层都重复检测前层的数据,这就是另外一种思路了,没有pre-condition而是边界之外是险恶的世界。

老兵帅客 发表于 2011-9-28 17:21:53

mark 发表于 2011-9-27 23:09 static/image/common/back.gif
老兵说得很有道理的。不过这个还是要看放在什么应用环境下。

对每层数据都校验,有个应用的地方就是中间层 ...

我的想法是每层有各自的任务,重复检测没有意义。
页: [1] 2 3
查看完整版本: Best Practice