欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

企业应用架构回顾与展望.txt 企业应用应用服务器AjaxVBVB.NET

程序员文章站 2022-07-05 21:55:29
...

当然,我见识有限,只能是回顾我所经历过的一些架构,定有不全之处,各位见谅。

回顾:
我从2001年开始接触企业信息化系统,之前做的是工业自动化领域的设备组态和控制系统。时间过得真快,都6年过去了。
最先了解的架构是两层c/s,其中的S 就是一个数据库,客户端通常都是vb/dephi或者pb开发的桌面程序。这种架构问题多多:部署、升级麻烦;开发时没有层次,客户端事件驱动的UI代码和数据库访问的SQL代码交织在一起,可读性和可维护性都很差。不过我并没有用这种架构开发过,但对微软提出的DNA三层c/s架构倒是稍有实践。

微软的DNA架构基于window server的com+组件服务器对两层c/s架构作了些改进,在这种架构下:把界面无关的核心业务逻辑定义在一系列接口中,然后实现相应的com+服务组件和访问代理组件,然后实现人机交互桌面程序,把人机交互程序和com+的代理组件部署到客户的桌面上,com+服务组件部署到windows server服务器的组件管理器中。这种架构相比两层架构还是有较大进步的:不必到处配置数据库连接了;如果改动界面无关的服务器端逻辑,在不改变接口的情况下,不必修改客户端程序,因此升级维护会方便一些;更重要的是层次比较清晰,把界面交互部分和业务逻辑部分有效隔离开了,类似于spring架构中service和mvc的分层,大大提高了程序的可读性可维护性。但相比几乎同时出现的瘦客户端架构来说,它的部署和升级维护还是太麻烦了。显然的,客户的核心业务逻辑变化不会太多太频繁,但界面程序的代码量和变化频率绝对大于60%。因此市场对受客户端架构接受更快,DNA架构很快落了下风。另外微软转变战略,准备用.net架构来和j2ee一争高下,DNA更是无人问津。

从2002年我开始用j2ee来架构和开发应用了。最初用j2ee的时候,系统的架构其实和DNA还是挺相似的,只不过客户端从桌面程序变成了浏览器,但宏观上还是UI层+service层+dao层。j2ee的大旗下,新技术新架构层出不穷。但宏观上依然没有多少变化,新技术主要改变局部的实现,比如hibernate改善dao层、struts和webwork改善UI层,spring是一个粘合剂,让你的多层架构更灵活,更少紧密耦合。ejb.x,有了解,但从来不曾在项目中使用过。从2002年到2005年,c/s架构和b/s架构在企业应用中都还是挺有市场的。注重客户体验的公司,倾向于使用c/s架构,注重部署和维护的倾向于使用b/s架构。但从2005年开始,随着ajax概念的提出天平开始向b/s架构倾斜。最初的b/s架构在客户体验方面的确无法和c/s架构媲美,因此b/s架构的先行者不得不大力钻研js/css/dom等技术,随着这批先行者对这些技术越来越得心应手的掌握,ajax的出世也就水到渠成了。在ajax概念出来之前,我所带领的团队已经大量采用xmlhtpprequest来获取数据,用js/css/dom来渲染界面了。ajax的出世,让我们在这方面更进一步。

展望:
随着ajax的普及和改进,b/s架构将基本取代c/s架构在企业应用中的地位。但这种取代不是简单地以浏览器取代桌面程序,而是从开发模式到用户体验这两个层面吸收c/s架构的优点,使b/s架构在这两方面达到甚至超越c/s架构。包括我们团队在内的很多开发者已经在这么做了。我们目前的开发模式是,用html来编写界面,用js来响应用户操作,驱动界面变化。在界面文件(html或者Jsp)中,基本上没有java代码和tab标签,只有js代码和html标签。js代码在响应用户操作的过程中,会使用xmlhttprequest来调用服务器端的业务逻辑,根据处理结果来驱动界面变化。这种开发模式,和使用vb/dephi来开发c/s应用是类似的。无非它们的client是用控件来编写界面,用vb/delphi来响应用户操作。

在使用ajax技术的b/s架构中,有一种做法是我所不赞同,但仍然有很多人在使用的:在响应用户事件的时候,调用服务器端接口是生成了一段html代码片断,用这个片断直接填充客户当前操作的页面,实现对界面的驱动。这种开发模式下需要服务器来生成界面,意味着你的服务器代码中不得不把html代码和java代码混合在一起,也就是业务逻辑和UI逻辑混杂而居。单这点而言,和DNA架构相比,是个倒退啊。我们的做法是大多数情况下,用户事件响应代码中,只用xmlhttprequest提交当前页面中的对象,返回的也是从服务器取回的对象。如果需要局部更新界面,只是把取回的对象或者对象图绑定到一个界面JS控件上就行了。当然,你也可能把当前界面改变会一个完全不同的新界面,这时候根本不需要xmlhttprequest,你只要iframe.href = url或者window.open(url),或者show一个dialog就行了。总之,在服务器端,混杂java代码和html代码来生成一个界面片断的做法是完全不必要的。