java的江湖——对基于java的web应用开发之整体认识

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wgj99991111/article/details/53535230

话说在上个世纪九十年代的中期,Internet开始商业化,他所带来的便利性使人们趋之若鹜,人们尤其是一些大的企业都想用这个东西给自己的工作、生活以及学习带来便利,但是这个时候计算机的软硬件环境差异很大,经常会发现你在A环境中开发的软件系统并不能在B环境中运行,在这样的大背景下,java携带着他“Write Once and Run Anywhere“的理念走进了人们的视野,并广泛的应用在了web应用的开发中,使用java的applet可以使以前呆板的超文本页面变得有那么一丝丝清新与活力。

当时一些大的企业都开始基于java开发自己的企业级应用系统,这些牛逼的程序员在开发的过程中发现,像数据库连接、邮件服务、事务处理等都是一些通用企业需求模块每次都要写,还和上次写的差不多(这虽然能够偷懒,并且轻松增加KPI,但是他们可是大神啊,思想觉悟都很高,不能用我等的觉悟来衡量人家),于是就将这些东西封装成了通用的模块,这样后人就可以直接使用了,(感谢大神的工作)这的确节省了后来人的开发时间和精力,但是后来的小伙伴们又发现了新的问题,那就是不同公司写的通用模块,虽然功能相似,但是他们之间还是有一些细微的区别,他们之间不兼容,然后几个家伙就凑在一起聊:
A:哎,哥们你写的这个东西的确挺牛逼的,我想用在我们公司的系统中,但是数据接口和我以前定义的差别太大,无法兼容啊!
B:你不是难为哥嘛,我写的时候又没有和你商量,怎么知道你的接口是怎么定义的,不过上次我想用C的东西,一看没法兼容,就只能又苦逼的加班干了一个周末,本来说陪老婆去度假呢,都没去成,老婆恨死我了。
A:要是有一个通用的标准,大家都按照这个标准写,不就不存在这个问题了。
B:嗯,这是个好主意,我明天给头汇报一下!
于是乎,著名的雷锋同志sun公司就联合当时的几个大碗,比如IBM之流,把这事给办了。
他们说要搞咱就把他搞得像那么回事,要不我们先定个框架吧。
于是乎就有了客户层、表示层、业务逻辑层和企业信息系统层,然后又定个原则和标准(当然了,以他们的工作作风,早就把安全性、可伸缩性、灵活性、易维护性等都考虑进去了),把大家以前写的模块重构一下,往这个框架里一塞,哈哈,牛逼的J2平台就出来了,在1998年sun向外界宣布了这个东西的横空出世,不但出来了,而且还出了SE、EE、ME三个适应不同情况的版本。
这可给一些后生小辈带来了福音,因为他们把前辈搞好的东西往一块一凑,再加上自己公司的业务逻辑,一个牛逼的企业版web应用就出来了,还能跨平台,想在那里部署就在那里部署。小伙伴们带着眼镜满世界飞,到处部署自己的系统,享受着外行人无比羡慕的眼光。
(这小子简直就是天才啊,随便捣鼓捣鼓,在控制台输入几个命令,这个系统就能用了,真牛逼,不怪人家工资高待遇好,咱没有那个能力啊!)
(其实这时小伙伴们心里暗笑,呵呵,其实我也是凡夫俗子,只不过我有牛逼的前辈啊!)
这一时期,J2EE可谓是风靡大千世界,就连遥远的东方世界,china都很流行,书店里满是介绍J2EE的书,大学里学生聊天满口都是JDBC、JNDI、EJB,RMI。你要是问一句EJB是什么东东,马上就会看到满世界都是鄙视的眼光,以及嘲讽的微笑,还有人轻轻的拍着你的肩膀说,小伙子你out了。
然而好景不长,总有一些初生牛犊不怕虎的小辈喜欢挑战权威,2001年,澳大利亚墨尔本一位名为Gavin King的27岁的程序员,就是这么个人。
Gavin:“老板,我总觉得开发的效率太低了,我用了EJB的Entity bean 1.1时,我总觉得我浪费了好多时间在处理Entity Bean的体系架构上,却没有花时间在核心业务逻辑的开发上,而且CMP给我们的限制太多了”。
  老板:“Gavin,别傻了,EJB是业界的标准,也是最流行的技术,而且我们公司是IBM的合作伙伴。如果有问题,问题就是我们还没有适应这样的开发模式”。
  Gavin:“不,我觉得肯定有更好的解决的方案。我们可以设计出比Entity Bean更好的方案”。
  老板:“哦,Gavin,我知道你很聪明,开发水平也不错。但是开发这样的系统太难了,而且你根本就没有用SQL开发过任何数据库系统。不要想这样一个不现实的目标啦!”
  Gavin皱了皱眉,说道:“不,我相信我有能力开发出这个系统。我的想法绝对是可行的。”
  Gavin King是一个倔强的家伙,然而他也是个人才,也许他的老板做梦也想不到两年以后,这个小伙子开发出了Hibernate这个产品,它成为当时全世界最流行的O/R Mapping工具。
  这个Hibernate,他的本意是冬眠,就是让数据去冬眠,等待春暖花开,被春日的阳光唤醒,说白了就是数据持久化。其实它是一个十分轻量级的对象关系映射框架,有了它,程序员就可以不用知道什么sql,什么数据库的并发与死锁,只需要操作对象,就可以完成数据的增删查改。哇,还有这样的好事,这简直就是我等数据库编程经验欠缺的小白们的福音啊!
  是的,Gavin做到了,在2004年Sun领导的J2EE5.0标准制定当中的持久化框架标准正式以Hibernate为蓝本。
  另一个家伙叫Rod Johnson,对Java EE 系统框架臃肿、低效、脱离现实的种种现状提出了质疑,并积极寻求探索革新之道。于是,经过不懈的努力,在2004年3月24日,一个叫Spring的东西诞生了。Spring是什么?举个形象的例子,最近中国的军队在搞改革,成立了很多新的单位,其中有一个叫“联合作战指挥中心”的东西,和Spring有点类似。如果说要打仗了,上层告诉联指,“你给我把那个该死的小岛拿下了”,那么联指就要考虑了,我面对的敌情是什么,应对这些情况需要多少、以及哪些种类的作战力量,我要不要把最新的歼-20用上,航母需不需要等等,还有这些力量之间怎么协调配合,遇到什么情况应该怎么处理,联指里一帮小伙伴就会搞出一个详细的作战方案,然后把上层交给的这个任务给拿下了。那么,Spring就是web应用构建过程中的联指,老板指示我要搞一个这样的系统,这个系统要能够完成什么任务,然后Spring掏出他的小本applicationContext.xml,把需要什么框架、技术,比如Struts、Hibernate等,这些都记在这个小本上,然后按照Spring的规范要求,让一帮小伙伴在不同的切面上进行程序设计,而整合、协调的事就交给Spring来完成了,最后老板交给的任务就在spring的组织下完成了。这就是牛逼的Spring。
  那么就有人要问了,这么复杂的工作他是怎么做到了,具体细节的实现是Rod Johnson的事,咱们就不要瞎操心了。不过它使用了两个最基本的思想和技术确实很值得大家学习的,什么呢?第一,就是面向切面编程,传说中的AOP;第二,就是控制反转,传说中IOC。AOP就是让专业的人干专业的事,比如你做日志采集,那么你就专心搞日志采集,其他的事情你不用管,在这个分工日益精确的现代社会,这种思想很得人心。但是,光分工还是不行的,你总要和其他模块配合起来才能完成任务吧,比如,刚才说的日志采集,就需要把相应的代码部署到需要各种模块上去,这种协作配合的工作是怎么实现的呢?这就要说到第二个东东,IOC,控制反转,这是那个没文化的家伙起的名字,简直让人不知道他是什么意思。其实啊说的简单点,就是把某一接口具体实现类的选择控制权从调用类中移除,转交给第三方决定。当然了这个第三方就是Spring框架,在这样的情况下,各个模块中的接口都可以专心的干自己的事情,而且需要调用那个接口,直接用就行了,并不要关心这个接口的实现类是谁,这些都在Spring的配置过程中确定了,就是这么牛逼,所有的事情都这样轻松的搞定了。
  当然了,还有一个叫Struts的框架,也被设计出来改进J2EE,他呢比较简单,纯粹是为了满足MVC这个模式。人们在软件开发的过程中发现一般的软件都包括数据模型、视图和控制这三个模块,如果把这三个模块分开,各自负责自己的事情,这样的程序就十分的清晰,有利于维护和发展。这就是MVC设计模式,那Struts就是把MVC设计模式在web应用开发过程中进行具体实现所形成的一个架构。
  以上这三个东西组合在一起,就是传说中的SSH,在web应用开发界就火起来了,盛况不亚于J2EE刚出来的时候,即便是现在,也有很大一部分web应用的开发人员使用SSH这个架构。但是随着web应用变得更轻、更小,人们仍然不满足已有的框架带来的便利,仍然想让自己的工作变得更简单(所以有人说人类的懒惰才是推动科技发展的原动力),一群更懒的人有在用SpringMVC代替Struts,用MyBatis代替Hibernate,形成了新的框架——SSM,而且这个框架也在逐渐的流行起来。
  也许这就是软件开发领域的江湖,再牛逼的技术也只能独领风骚三五年,然后就会被后辈无情的拍死在沙滩上。而这也正是这个江湖的魅力,他吸引这一代又一代仁人志士遨游其中。今天的故事就讲到这里,再见
  (本文所有情节纯属虚构,对各种技术理解不深的地方还请大神们批评指正!)

猜你喜欢

转载自blog.csdn.net/wgj99991111/article/details/53535230