`
liuming
  • 浏览: 163876 次
  • 性别: Icon_minigender_1
  • 来自: 蛮夷之地
社区版块
存档分类
最新评论

厨师能不能和服务员抢饭碗:界面、逻辑、数据的那些事儿(上)

阅读更多

jasongreen 一篇《Web开发的重点在前端 》,让我想起了上一年年末的时候,七月十五 前辈的一篇《论PHP的倒掉 》引发了一场口水战 。接下来又一篇《有感于“论PHP的倒掉” 》也发到论坛上,引发更大的口水战 。在口水战中,可以看到很多人一边倒地骂七月十五把PHP和Javascript作比较是一个很无知的论断,让他去看这个书那个理论,让他回家修炼。

 

但我认为这当中有的人根本没有看懂七月十五说的是什么意思,更没有看到问题的本质。一定要怪七月十五的话,只能说他没有把意思阐述清楚,但是他的理念却正确得很,所谓内行看门道、外行看热闹。

 

你说前端能和后端比么?后端能和数据库比么?厨师能和服务员抢饭碗么?其实当你回顾一下历史,观察一下现状,你就会发现这些看似不同类型的东西虽然相辅相承、相依为命,但却存在着很微妙的竞争关系。

 

在互联网革命之前,企业管理软件的开发都是以数据存储(可以是数据库,也可以是具体的存储模型)为中心的,一切都围绕着数据存储来转。所有的程序都只是增强数据存储功能,帮助人类和数据存储工具(比如说数据库)交互的一个辅助型的工具。那个时候,你要搞企业IT应用,好啊,你得先把数据存储的事确定下来,其它都好办。程序嘛,可以找人写,专门为你的数据存储模型来写。操作嘛,可以培训人来用,当然也教他们怎么操作你的存储模型。总而言之一切的关于数据管理的应用,都是在为高高在上的这个数据存储(以数据库产品为代表)擦屁股。那个时候做数据库的可风光了,客户都屁颠颠地来求你帮他们搞数据库,还怕你哪天不高兴了撒手不干。反正我的数据库就是这个样子,你的程序能做就做,做不了你就另谋高就吧。老大,我的数据全在你那里哦,有什么事好说,好说。那时候的数据库产品和今天的Web 2.0网站一样,是百花齐放,也同时奠定Oracle今天成就。不过我们中国大多数的企业并没有经历过这个古老的IT年代,古老得连一个办公室秘书也懂写SQL的年代。

 

后来不知咋的,互联网革命就爆发了。爆就爆啊,它还要城门失火殃及池鱼,带着一些更为强大的工具(比如OOP)把古老的软件开发的理念给革命了。软件开发的着重点从围绕更接近机器层面的数据存储,往更接近人类的方向挪动了一大步,开始向业务逻辑这里集中起来。原因是这些新引入(并不是新发明)的技术被广泛地运用,使人们能征服更大规模的应用,在花费同样的资源的情况下能处理更复杂业务逻辑。这就引申出一个问题,软件开发的资源是有限的,而整个行业和社会在同一时间推动和发展软件技术的动力也是有限的,归根到底来说是人的注意力和大脑容量是有限的。大自然总体是很公平的,不可能老是让你两全其美,你得到了一些东西,就必须付出一些代价。为了去研究和让系统去处理比往日复杂几倍甚至十几倍的业务逻辑,人们必须把注意力和资源从数据存储模型中解放出来。所谓的两手都要抓,两手都要硬那是不实现的,要真是这样那就意味着你两手都抓得不够硬。那你说以前的那套封建的数据库王权制度,老让人把资源往它那进贡,怎么能解放出生产力?于是大家当然不爽了,不想再把资源往数据存储中投了,一场无声的革命就发生了。而这之中有很多技术作了非常大的贡献,像Smalltalk起到的作用甚至是决定性的(OOP和MVC的概念源自于Smalltalk)。这些软件开发技术都有一个共同点,拆分和封装复杂性、隔离机器层和存储层,把这些阻碍人类和机器对话的东西都关到笼子里去。

 

这当中有一员的嗓门最大,Java。虽然它不是这些概念的发明者,但却是很有影响力的传播者。Java把一些解放产生力的理念融入其中,而这正是这些理念把这场革命推向胜利。比如JDBC,把具体的数据库实现给封装掉了。从此你开发一个系统时,不再需要先担心你用具体的哪套数据库的哪个版本,因为一但数据库操作封起来的,在上层调用的时候几乎是一样的。连所谓的“低级JDBC”都能够做到,更别说把数据库封了几十层的高级ORM了。又如内存回收机制,把内存回收工作让机器去做了--您放心写,有个GC帮你打扫呢。当然这里面带来的副作用是有的,但不是本文讨论的重点。重点是,有了这些工具,作为一个应用系统的开发人员,不再是每一个细节都为Oracle(或者其它具体的数据库)而考虑、去设计的了。我的重点是放在业务逻辑,只要我的业务层走通了,剩下的就交给工具去为我打理存储的细节。现在应该轮到Oracle来帮应用程序擦屁股了,也就是数据存储沦为应用开发的仆人。可以那么说,这些封装存储操作的工具和方法的广泛使用,使应用层在争夺存储层的王位的战役中,取得了全面的胜利。事实上近年的数据库(特别是大型数据库)不断地增强为应用层服务的组件也正反映了数据存储的以前那种不可挑战的核心地位的全面溃败。不仅如此,应用开发界在赢得了战争之后,也在不断地推陈出新,一直打压数据库的对上层应用的影响力,大有不雪耻辱不罢休的架势。我这里只用了Java来举例,是鉴于它的知明度。但有一些相对不太出名的工具,基于各种语言(包括Java)的都有,把这弱化数据存储件事做得很牛,甚至连数据结构的定义都从数据库中抢走,转移到应用层中。至于具体名字可能大家心里有数,我就不说了,免得被人骂是托。

 

要是我直接说Java和数据库产生了竞争,就像七月十五说前端和后端产了和竞争那样,肯定是要有大一群人跳出来骂的。表面看来,职责不同的东西怎么竞争?但当你分析这背后的暗流,却发它们确实在竞争着,这种竞争的目的并不是像同类的竞争一样为了消灭对方,而且也不可能消灭对方。事实上应用软件这几十年的发展,不单止没有消灭数据库,反而更依懒数据库了。最好的一个例证是我之前问一个新新程序员,说要让你做管理信息系统,没有数据库你怎么做,他瞪大眼晴像看外星人一样看着我,反问:没有数据库你能做管理系统?

 

这些不同职责的技术所真正竞争的并不是消灭掉对方,而是在争一个主仆关系,在争谁应该服务于谁。在本文中我说了业务逻辑的技术是怎么和数据存储模型竞争的,我将在下一篇文章中继续扩展七月十五的话题,来讨论一下前端是怎么和后端产生竞争的。当然,我觉得要是和只看标题或者没有看懂全文意思的人讨论的话,会挺浪费时间的。

5
3
分享到:
评论
2 楼 slawdan 2010-10-13  
呃……楼主v5

我想15作为一个php新手只是发了一些常见的感慨而已……
1 楼 七月十五 2010-05-25  
思维清晰,见解深刻。分析得很透彻。支持。

相关推荐

Global site tag (gtag.js) - Google Analytics