[创新理念] 做减法的Web应用二次开发平台(一)
hotbarsmu
2008-09-19
拼出一张世界地图一位软件开发商的老总曾经问,“当初自己做项目时就用Delphi,几个人3个月的时间完成了。为什么现在十几个人,用了这个平台那个框架,还需要半年多的时间。”在笔者不知如何作答之际,老总自己说出了心中的答案,“可能是现在需要实现的不是几个业务功能而是一个大的业务系统,要写大量的项目文档量,比起C/S,B/S的这种多层架构在技术上需要考虑的东西也更多了”。 每一次计算模式与通讯模式的变革,都会摧生一批相应的二次开发平台,好比一次次航海技术与行陆技术的升级之后,人们总会发现未知的世界。如果将C/S架构带来的新世界比作一个岛屿,B/S架构带来就是一个新大陆,后者需要更多的勘探时间。没有人能在很短的时间内走遍这块大陆,务实的做法是将一部分地域勘探清楚,测绘出局部地图,若干份局部地图拼起来构成全貌。因此,一个有趣的现象是在C/S时代,Delphi、PowerBuilder、Notes二次开发平台或工具自成体系,并基本是互斥的;而在B/S时代,数据持久层框架、业务对象层框架、表现层框架是相互配合的。 C/S时代的技术假设是以桌面操作系统为前台环境,业务逻辑前置;B/S时代的技术假设是以浏览器为前台环境,业务逻辑后置,原来的二次开发平台已无用武之地。多数公司选择了重要而且紧急的后台业务逻辑框架作为研发重点,少数公司,选择了重要但不紧急的表现层框架作为研发重点。这好比多数人从大陆的一端开始勘探,少数人从另一端开始,经过一段时间的各自努力,在内陆会师。交换成果后,大家发现至少可以拼成一张贯穿大陆主线的地图。 在表现层框架成熟之时,构建一个真正意义上的贯穿前后台的快速开发平台就成为可能,这也意味着占代码量50%的前台开发有规范与标准可依。 新一代的二次开发平台应该是: 1, 较为完整,涵盖从前台到后台的软件架构各个层次。 2, 组装灵活,可以使用全部也可以使用其中一部分。 3, 开放度高,当某一层出现更为先进的框架时,可以取代现有该层框架。 换言之,用户可以用做加减法的方式,将不需要的部分从该平台中移除,将需要的部分引入,从而调整出适用某个项目需求的最精简的开发架构平台。随着这样的二次开发平台不断发展,用户将更多地做减法。
由简入繁难,由繁入简易有过J2EE Web应用开发经历的程序员都知道,对于每一个应用我们除了要处理复杂的界面与排版之外,还要处理诸如权限、异常、日志等等这些与业务无关但又不可或缺的功能,实现这些功能要占用我们的大量时间,让本来就短的项目工期更显得捉襟见肘。 按照做减法的二次开发平台的设想,我们选取对应于软件架构中各层的成熟框架,以松耦合的形式将这些框架整合到一起协调工作,这样就可以初步满足上述需求了。 J2EE Web系统开发中最麻烦的不是占50%工作量后台业务逻辑,而是另一个50%——前台界面开发,我们引入展现中间件来负责这一层,后台业务逻辑层中众多的Java对象与属性配置文件的管理交给业务对象层,再加上必需的应用中间件与数据库,就构成了二次开发平台的核心。数据库里存放的是平面化的二维数据,在面向对象的开发模式中,操作的是立体化的对象数据,增加一个持久层框架来负责这个O/R mapping的过程。需要细化对系统资源的权限管理,比如按角色方式管理用户能否访问页面、组件、组件里的元素及后台的Java方法,可以引入一个权限框架。在强调业务流转或规则计算的场景中可以引入工作流管理系统与规则引擎。如果业务流转跨系统并涉及SOA架构体系,可以引入企业服务总线层。
(图:做减法的二次开发平台总揽)
dorado应用基础框架(MARMOT)从2000年开始,笔者所在公司BSTEK的研发团队就开始专注于交互型Web应用系统的表现层的技术研发,2002年BSTEK成立,2003年推出Extra 3,2005年推出dorado 4,2006年推出企业级AJAX展现中间件dorado 5。dorado的出现解决了B/S应用的前端展现问题,使我们原来要花费一天时间才能做好的界面现在一个小时或更短的时间就可以完成了。用户提出在此基础上如果提供现成的更加贴近于应用的诸如各种展现组件自定义、权限等相关功能的实现,将进一步优化dorado的实际应用效果,另一方面,每家软件开发商引入dorado展现中间件都或多或少有一个与既有开发平台整合的过程。为此,BSTEK推出了dorado应用基础框架(代号Marmot )。
DORADO设计与实现在介绍Marmot之前,先介绍一下DORADO展现中间件的设计与实现,其设计有以下几个特点: 1, OPOB设计模式。OPOB - One Page One Business,即通过一个页面完成一个业务功能,是更适应页面复杂操作频繁的交互型MIS类业务需求的设计模式。之前的MPOB是适应浏览型与填报型业务需求的设计模式。 数据模型驱动。表现层框架数据与UI组件相分离,通过具有管理功能的对象(dataset称为数据集合或数据模型)保证各种数据控件具有一致的行为,用户完全通过各种数据感知控件来观察和操作数据模型中的数据。dorado所采用的数据与表象分离的设计方式,事实上就是一种MVC的架构模式,是存在于Client端内部的“迭代式的MVC架构”。
(图:dorado中的数据模型驱动) dorado中的组件主要分为Dataset和Control两种。Dataset用于分装展现层中的数据,Control用于封装各种界面元素和操作逻辑。Control主要用于与用户交互,Dataset主要用于与后台数据、业务逻辑交互。
(图:dorado实现原理) 随着技术的发展,对数据的管理、对UI组件的管理、对AJAX通信的封装、国际化等等表现层的功能和设计已经变得越来越复杂,现在已经不再是那个表现层里只有HTML的年代了,已经成为了一个跨越Server端和Client端的子系统。 1, 松耦合整合。表现层框架与后台业务逻辑框架的对接采取松耦合模式,只要能把数据塞给表现层框架,表现层框架就能展现,并能够把数据回填给后台业务逻辑框架。 2, 性能优化。DORADO客户端的优化包括通过大量测试寻到最优实现方案(JavaScript+DHTML的使用方面) 、复杂界面按需初始化、规避由浏览器BUG导致的内存泄露等,对网络通讯的优化包括数据的懒加载、利用GZIP对通讯数据进行压缩、利用JavaScript编译器对库文件进行代码压缩、利用Ajax改善用户的操作体验等。
DORADO展现中间件的实现,有以下几个层次: 1,表现层4大功能。数据通过各种控件展示,进行查询、增加、修改、删除、保存等操作,占表现层技术需求的80%,这是DORADO本身研发实现的重点,提供控件Widget Lib、国际化I18N、皮肤Skin,角色Role、AJAX通讯引擎等支持通过视图模型viewModel进行表现层建模。剩余20%包括报表与打印、复杂图形与数据分析、文书等,通过与第三方产品整合或集成来实现。 2,前后台交互。通过不同的数据集合dataset支持不同的后台,包括SQL查询结果集,POJO(Javabean或Map的collection),Web Service,XML,定制的数据集合等,对框架而言,支持Spring、Hibernate/ibatis、WfMC/BPEL/自有标准流程引擎等。 3,开发与调试环境。提供集成开发工具 dorado studio与Eclipse插件用于提供针对产品所需的各种源文件的模版化生成、创建向导、可视化配置,以及一些简单的编译、部署、测试等功能。Debugger提供评估JavaScript并计时、显示调试日志、显示部分系统信息等功能的简单JS调试小工具。 4,性能测试与调优。内置多种浏览器端性能优化措施。提供Web Console进行参数配置与性能监控。提供自主研发开源小工具TestFrame专用于测试页面刷新用时、提交用时等浏览器端页面性能定量指标。
|