« 德国式的幽默 | Main | 我们并非什么都不能做 »

从SOA说开去

作者:virushuo 发表于 2008-03-10 03:03 最后更新于 2008-03-10 03:03
版权声明:按照by-nc-sa的cc协议可转载,拒绝采用“独家” 授权媒介(含网站和平面媒体)转载、引用、链接,除非获得本人许可。转载时请务必以超链接形式标明文章原始出处和作者信息及本声明。


余晟昨天跟我讨论SOA问题。我说了说自己的观点。后来想想,应该整理一下。于是就有了这个blog。关于SOA是什么,请自行google,不多说SOA。

首先值得肯定,SOA试图解决的问题是正确的。SOA所关注的问题,是确实存在的。其实说穿了,所有的开发方法,项目管理方法,框架,工具,无非都是为了解决这些问题。抽象点概括出来不过就是可扩展,易维护,稳定性高,可复用这么几种而已。

所以说,SOA所希望解决的问题,说回根本上还是这些,其实这是废话,因为计算机诞生起,人们就在为了解决这些问题不懈努力着。不错,SOA是一种尝试,但是在众多厂商的推波助澜之下,这种尝试变的有点吓人,看起来似乎不再是一种尝试,而是解决问题的银弹。这当然是不对的。

使用计算机,最终还是为了解决现实世界中的问题。而用计算机,需要用计算机世界的逻辑。这个工具的逻辑和要解决的问题域模型非常不吻合。所以试图在计算机中模拟真实世界,就成了一个难题。(题外话,所谓面向对象,其实可以看作人们试图在计算机世界中重现现实世界的一种努力)。因为这种思维转换的难度,使得程序设计变成了一门专门学科。回想历史,只能写机器码的时候,人们利用计算机解决的是需要快速获得运算结果的大数据量运算的问题,比如导弹的飞行轨迹之类。现在需要解决的问题种类就很多了,运算量也越来越大,当然需要更好的工具。

这是一个有趣的循环,有了更好的工具,就可以解决更复杂的问题,而更复杂的问题又让更好的工具变的束手无策。想想你在写程序中遇到的困难,有多少是问题本身的困难?有多少是写程序这件事本身的困难?换句话说,写程序本身在某些情况下变的比要解决的问题更加困难。这里余晟概括说:好像你会写文章,但是不会用某支笔写字。

我们来看看语言的抽象层次。从机器码,到C语言,到更高级的语言,到动态语言,从底到顶,语言越低级,越接近计算机世界,越高级,越接近于现实世界。我常常说,C很好,不过只适合写系统级别的东西,不适合写应用。一样是因为这个原因。C是对计算机系统的最小抽象,所以用来描述系统级别的问题很轻松,但是用来描述现实世界的问题就很吃力,好比用笔画来写字没问题,不过只用笔画来写文章,那就累人了。

当然,理论上任何语言都是一样的。你当然可以用C来做网站。不过因为模型的不符合,这会让你付出更多的时间和钱,还有失败率。

SOA试图通过一系列的描述来解决接口混乱和扩展困难的问题。同样的情况发生在webservice上过,发生在ejb上过。同样的厂商喧嚣也同样在webservice和ejb上出现过。(甚至,厂商们还往往在试图让ejb标准变的更加难用而不是更加容易)与其引入更复杂的问题,不如让工具本身更富有表现力。这是我近年推崇动态语言的原因。语言够简单了,阅读就容易多了。想像一下,一个python写的程序和一个汇编写的程序,哪个更好懂,更好修改?

我认为,目前的程序设计,只要解决了3个问题,就可以让很多普通用户进行开发,解决自己的实际问题了。这3个问题是:数据类型和函数,内存管理,进程管理。可以说,这3个问题都是目前计算机语言中和现实世界的经验最不符合的,所以导致了理解困难,没经过一定训练的用户难以完成这个思维转换。

SOA试图让接口描述和数据统一,这种统一的办法是xml。而如果开发足够容易,代码本身比那一堆包含无数规则的xml描述更富有逻辑和表现力,更容易看懂,这时候,还有人想去看xml吗?

这就好比开自动挡的车,你只要关心路线和目标,操作本身可以不用那么关注。你要完成的任务是解决问题,而不是为了学习SOA。

因此,了解SOA的思想,并应用于实际开发。但是,最好别被那堆规范吓倒。要知道,SOA的思想和SOA绝对是两回事。

相关文章:
blog comments powered by Disqus
CC License. Some rights reserved.
署名·非商业用途·保持一致
本站之所有未作特别说明的内容均使用 创作共用协议.
POWERED_BY_MT_3.2