首页 | 博客群 | 公社 | 专栏 | 论坛 | 图片 | 资讯 | 注册 | 帮助 | 博客联播 | 随机访问
CodeBloating- -| 回首页 | 2007年索引 | - -TddIsFolding

UnitTestingConfiguration

                                      

配置和编程的本质区别是什么?

为什么有的代码很难单元测试?

配置可以单元测试吗?

什么东西才需要单元测试?

什么是组件编程?

什么是Convention over configuration?它们两者有什么区别?

为什么Web Container是一个白痴的想法?

首先,配置和编程就其形式而言没有根本区别,你可以用数据形式编程,也可以用代码形式配置,配置跟代码是一回事,配置活动和编程活动是一回事。但似乎配置和编程还是有根本的区别呀?区别就是,配置完全就是为了正确地链接它外部的系统或者组件或者模块(随便你叫什么),所以纯粹的配置是不能被单元测试的,因为要验证它的正确性,必须把它链接的所有东西作为一个“单元”来进行验证,仅仅验证配置本身是没有任何意义的,譬如你验证一个链接字符串有什么意义呢?你要看系统是否能够连到数据库,才是真正的验证。当然连接字符串是否符合一个schma,那是可以验证的,可以成为链接字符串的“单元测试”?

我们再看看编程或者代码,理想状况下,你写的那个“单元”,很可能是跟其他部分没有依赖的,譬如你要写一个堆栈的抽象数据类型,那么它可能跟这个系统99.9%的东西都答不上边,这时,你谈论配置是没有意义的,“堆栈”的正确性完全是它自己作为一个整体是否正确,而这种东西是可以被单元测试的。而这种理想状况只是在系统被设计得很模块化的时候才会出现,往往你写的一个“单元”,有它自己的一些逻辑,但同时又混进了一些“配置”的东西在里面。你的系统设计得越不模块化,你混进的“配置”噪声就越多,就导致你的每一个“单元”越难被单元测试。

组件编程就是希望达到一种模块化,组件是代码,组件的链接是配置。很多人的观念是编程是耗费时间的,配置是不大耗费时间的,所以配置都是好的,但如果配置巨复杂,你的开发效率也会很低下,这就是Java什么狗屁都要配置的恶果。不必要地加入配置,就不必要地加大了配置验证的工作量。Web Container这类主意,把页面不必要地依赖了一个本来不需要依赖的东西——容器,那么你就不必要地又要加入配置了,还有就是配置的验证,你要不停地redploy,reboot这个容器。

DHH所谓的Convention over configuration究竟是啥意思?两者为什么有区别?Convention,就是把配置隐含到每个组件里面了,也就是你不需要你个显式的“配置单元”或者配置文件了,你只要把每个组件作对,那么它就自然整合到大的系统里面了,而如果这种隐含是直观的(譬如ActiveRecord),那么作为开发人员就基本上不需要考虑太多配置了。另一方面,如果你要显式地配置,那么你就有很多可能会出错,同时增加了很多不必要的工作量。同时显式配置必定包括了三个部分,配置本身,被链接的两端。而隐式配置只有两个部分,要相对简单。

【作者: RonaldMatt】【访问统计:】【2007年06月23日 星期六 13:00】【注册】【打印

搜索

Google

Trackback

你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=6339562

回复

验证码:   
评论内容: