写这篇Post源于我既做过NET开发又做过JEE开发的经历在这样的转变过程中我对单一平台开发所带来的思维局限性有了很多清晰却零散的想法在看了振河兄的页面间传递变量的方法及使用范围的讨论之后我更能体会到在不同的平台进行开发思维方式会是如此之不同原来那些零散的想法也随之不断在脑海中涌现让我有了写下这篇Post的沖动其实我一直都在宣扬一种观点技术之间是相通的精于触类旁通善于联想是我们程序员应有的优势我们在专注NET技术的时候不妨在工作间隙休息的时候看看NET外面的世界
提到NET和JEE一般都会想到它们之间兵戎相见水火不容的关系毕竟两者都在努力地去虏获程序员的青睐占领更多的市场份额我无意去鼓吹NET是如何如何之强大JEE是如何如何的成熟也无意去探究NHibernateSpringNET等等Project的起源只想从一个程序员的角度去看待两者在互相竞争的过程当中到底相互借鑒了什么同时探讨一下同时了解两个领域知识的必要性好让我们言归正传
还记得年初我到了DELL公司实习所承担的工作任务就是建立一个Web Application供多个有密切联系的部门使用以提高部门间的协作程度在选择用什么技术来做这个Web Application的时候我放弃了比较熟悉的ASP进而选择了ASPNET正是做这个Project我跟ASPNET乃至NET结下了不解之缘当时第一次接触到ASPNET第一个感觉就是它比ASP好多了再也不用像写ASP那样在HTML嵌套着一堆堆的Scriptlet动态内容的呈现都包含在一个个方法中如PageOnInit()和PageOnLoad()等等这些方法让我看到Client端JS方法的影子在开发ASPNET页面的过程中我需要做的就是在页面中引入不同的Web Control或者是HTML Control这些Controls与HTML标签是何等的类似除了它有ASP的prefix和那时看起来如Magic一般的runat=server这样的相似性让熟悉HTML和JS的我很快掌握了ASPNET的基本应用而我也以极高的效率完成了公司分配给我的任务尽管我对诸如RequestResponseSession和Application这样的对象并不是十分了解ASPNET所带来的进步是革命性的难怪有朋友认为ASPNET是NET家族中最为成功的产品了我当时只是拿ASPNET来跟ASP作对比其优越性自然显露无遗尤其是在控件设计方面的优势事实上直到后来进入JEE的开发领域我依然对ASPNET的开发方式赞赏有加Microsoft在技术的创新上一直秉持削弱领域开发特性的原则让开发人员能够在不同的开发领域中都可以轻松上手游刃有余ASPNET的出现带来了WebForm而在桌面程序开发中则有WinForm两者相通的地方随处可见这让原有的桌面程序开发人员可以平滑的过渡到Web Application开发中来ASPNET对于控件在设计以及使用上的支持堪称完美也为网页设计人员进入ASPNET开发领域扫除了不少的障碍反观JEE领域做Swing开发的人员如果要学习Web的开发原有的知识几乎无用武之地了在这个人气就是财富的年代在一定层面上求同存异让开发人员能够一通百通无疑是一个十分明智的做法JEE领域也开始意识到了这一点将Swing概念应用到Web开发的Wicket Framwork的发布着实是一个极大的进步啊JEE在降低Web开发的难度吸引入门级开发人员方面需要向NET好好请教一番了
好个人经历接着说年底我进入了一家软件公司从事JEE的开发工作当时公司技术部门负责人在面试我的时候提到了我缺乏JEE的开发经验的问题我信心满满的告诉他我做过NET的项目而NET和JEE都是专注在企业级应用上的因此肯定会很快上手不会有什么问题然而后来的工作证明了平台之间的差异性是很大的从NET过渡到JEE并不是一件轻松的事情没有了熟悉的Web Control取而代之的是简陋的Tag Library没有了简单易用的EventDriven的方法呈现眼前的是doGetdoPostdoHead和service这样看似丑陋的面孔蜕变的过程是痛苦的但是蜕变带来了进化开发方式的改变让我可以从一个更加深入的层面去看待Web开发而我开始重新认识Web ApplicationWeb开发的复杂性在很大程度上源于Http是一个无状态的连接协议Web Server不管你是Michael还是Jordon只要你在浏览器上使用了相同的URL就会得到相同的资源在这里你必须清楚URL到底是什么的缩写也许你会站出来反驳我刚才所说的结论但是这种情况在只有静态HTML网页的年代是绝对正确的随着时代的发展资源已经不再局限于静态的HTML网页随之出现了所谓的动态网页这里的动态不是指充满Flash动画的网页而是指网页的内容会根据不同的Request而发生变化虽然Web的内容开始个性化了但是仍然没有脱离Client发送RequestServer返回Response这样的模式由于Http是一个无状态的连接协议为了能够识别用户访问同一资源的状态在JEE的世界里我们就得从RequestResponse和Session这样的对象入手控制这些对象的Life Cycle因此我们哪怕要进行最为简单的Web应用程序都必须对RequestResponse和Session这样的对象有充分的了解关注这些基本的对象让我们对于应用程序的Flow有更为准确的把握能够更好地进行模块地划分便于开发人员进行协作然而在NET的世界里对Request和Session这样的对象关注远不如对Page的关注从振河兄的Post就可见一斑了ASPNET开发降低了开发难度却在一定程度上阻碍了开发人员对Web Application的整体把握正如春鱼兄的Feedback中提到的过分纠缠页面之间关系不利于系统整体架构的良好设计JEE的应用程序可以让程序员在Web Application的整体架构上有一个很好的体现NET还是得好好努力啊!建议NET的程序员能够尝试着利用JEE的技术来开发一个简单的Web Application我相信这样的一个过程会让你对Web开发有进一步的认识
进入了JEE的领域除了开发方式变了buzz words也跟着改变了两个使用频率极高的词汇充斥着每天的工作一个是MVC另一个则是Framework我感慨于Pattern在JEE中使用的广泛性感慨于应用实现了MVC模式的Framework竟然可以让庞大的团队协同开发一个Project那时的我开始相信Pattern的广泛应用给软件开发带来的变化是巨大而深远的也开始阅读《Core JEE Patterns》并从中获益而在NET的世界里对Pattern的重视则远不如JEE尽管这样的情况在改变说到了MVC不得不对这样一个份量很重的词汇做些陈述了JSP的发展经历了两个阶段JSP Model和JSP? Model在Model中是JSP和JavaBean的结合在一定程度上实现了MVC但是Model与Control之间的耦合仍然普遍存在而Model则真正实现了MVCJSP作为Presentation层负责数据的显示Servlet充当着一个Request Dispatcher的角色将Request分发至不同的处理Business的模块中它就是一个指挥官扛着Controller这面大旗而VO则是一个数据的载体是MVC三角中的ModelMVC的概念是进入JEE开发领域必备的从你做第一个简单的应用程序开始从你看第一篇关于JEE开发的文章开始而丰富的开源MVC Framework也成为了我们学习MVC Pattern的良好教材对JEE有了初步的认识之后就可以选择一些优秀的MVC Framework来研究了例如WebWork和Spring这对于学习系统整体架构设计方面是大有裨益的
也许物极必反真的是一条不变的真理JEE领域中对于开发Framework的追求可谓之疯狂大家朝这里看Wicket Introduction你会发现可以用来开发Web Application的Framework竟然达到了个并且还在日益增加事实上JEE开发的软肋不在于Control这个层面而是在View许多天才的精力都耗在重复制造轮子上却没有想办法去完善一个或者多个Framework这不得不让人感到痛心啊!在这一点JEE是不是得向NET好好学习一下呢?在NET的世界里最受关注的应该是控件的开发了一个设计良好功能强大的控件对于提高开发效率无疑是极好的助推器很多NET的开发人员都将精力花在设计控件上NET就像一个聚宝盆一样不断汇聚开发人员智慧结晶在JEE的世界里为了减少这种资源浪费的情况Wicket Framework的出现了它强调组件设计和组件重用让开发人员集中精力于组件的开发从而增强Framework的功能已经易用性但愿Wicket Framework能够为JEE世界带来少许的改变吧!
说着说着真的有点野马脱缰的感觉了不知道说了半天大家是否明白我真正的用意呢? 在这个技术如此Open的年代NET的程序员应该去了解JEE反之亦然我想相互学习共同进步这句再普通不过的话可以概括这罗罗嗦嗦的数千字吧