写点什么

采访开源 Web 框架 SimpleFramework 开发团队

  • 2010-12-01
  • 本文字数:3573 字

    阅读完需:约 12 分钟

在技术的道路上,永远不缺乏充满激情、勇于创新的人们。只要我们善于思考、发现、总结与提升,就能创造出造福社区、为他人所用的好东西。而 SimpleFramework 就是一个很好的例子。

在其网站开放一个月之后,InfoQ 有幸采访了SimpleFramework 的开发团队(SD:SimpleFramework 开发团队):

InfoQ:目前市场上的 Web 框架有很多,譬如 Struts、Spring 等,为什么还要创建 SimpleFramework 呢,能够为 InfoQ 的读者简单介绍一下该框架的由来、发展及现状吗?

SD:Simpleframework 起始并非一独立框架,而是对现有框架(如 Struts)的业务性补充。最初,利用 Filter 机制和 XML 格式的业务描述来实现请求的可配置扩展处理,将 Struts 等框架中的一些公共功能以组件(如 AjaxRequest、Submit 等)的形式提供,基于组件来实现 UI 和业务(逻辑)功能。随着这一套思路在很多大型企业级应用中使用,一套基于 Filter“后处理”技术的、完整的 MVC2 和组件化的 WEB 应用开发模式也日渐成熟。它利用 MVC2 实现关注点分离,利用组件复用实现缩短周期、节约成本、提高质量等目的。SimpleFrameworkV3.0 已经发布,它包含核心组件库、基本组件库、业务组件库和扩展组件库。

InfoQ:从其功能上看,它与 Struts 具有最多的相似点,请问 SimpleFramework 较之 Struts 的优势和劣势各是什么?

SD: Struts2 相较,SimpleFramework 的优势和劣势简要如下:

优势:

  1. 组件体系:声明式组件定义;开放的组件体系,丰富的组件(库)
  2. 可扩展性:可自定义或扩展组件,可按照给定规范整合第三方组件资源。
  3. 可积累性:可将模块 / 某类应用封装为组件,可构建业务型组件
  4. 可整合性:基于过滤器机制可整合既有应用资源。
  5. 实现模式:SimpleFramework 不仅仅是 MVC2 的实现,还具有完整的组件化的 Web 业务支撑能力。

劣势:

  1. SimpleFramework 没有 Struts 的成熟度及用户群。
  2. SimpleFramework 暂时还没有丰富的第三方资源。

InfoQ:“后处理”是 SimpleFramework 的技术基础,请您解释一下何为“后处理”,Simpleframework 在这个过程中都做了些什么?

SD:在介绍“后处理”之前,有必要先介绍一下过滤器。许多因素决定了过滤器的重要性:首先,它提供了将公用任务封装成可重用单元的能力;其次,过滤器可用于转换来自 Servlet 或 JSP 页面响应。Web 应用的基本任务是格式化数据后返回客户端。将过滤器作为 Java Servlet 规范的一部分,为开发人员提供了实现可重用跨容器转换组件的机会。过滤器可以实现多种不同类型的功能,诸如:基于用户身份的阻断式认证请求、Web 应用的用户日志和审计、图像转换及地图缩放、减小下载体积的数据压缩、特定区域的请求 - 响应本地化实现、适应多类客户端之 WEB 应用的 XML 内容 XSLT 转换、标记化、触发资源访问事件、MIME 类型链接、缓存处理等。这些仅是过滤器应用的很小部分而已,过滤器的应用还有更多。

而 SimpleFramework 用过滤器来做“后处理”——拦截 HttpResponse 并导向 SimpleFramework 作“二次处理”:分派请求逻辑;依据“组件声明”生成或渲染组件、生成代码、处理业务规则、重构响应内容等;其并结合其封装可重用单元和转换页面响应的能力来实现组件处理机制,构建可重用的组件。据此,SimpleFramework 已具有完整的 MVC2 特征。

其工作机制如下图所示:

InfoQ:SimpleFramework 的另一重要特点是“组件”的概念,组件能够大大减少程序员的开发工作量。在 SimpleFramework 中,组件能做什么,V3 中已提供的组件有哪些?

SD:SimpleFramework 提供了大量可重用组件,并以一定的接口 /API 方式暴露给用户,供应用层调用。

  • 核心组件:提供业务无关的功能性处理组件,如 AJAX 请求、表单提交、页面包含、验证等。
  • 基本组件:提供 Web 应用开发所需的 UI 组件,如 Layout、Tree、Menu、Window、Grid、Upload 等。
  • 业务组件:提供业务相关的模块或公共功能级组件,如工作流、论坛、投票、评论、字典选取、异常、系统日志等。

其组成如下图所示:

InfoQ:在您提到的核心组件中包含 AJAX 组件。它能够自动生成 AJAX 客户端代码,自动加载到浏览器并在浏览器中执行。那么,当框架提供的 AJAX 组件不能满足用户所有的 AJAX 需求时,V3 提供何种扩展机制供用户来扩展组件的功能?

SD:普通 AJAX 从技术上讲就是 AjaxRequest 完成基于 Ajax 的请求及响应过程,通过 XMLHttpRequest 对象可以很容易实现其基本功能,但 AJAX 组件通过封装 AjaxRequest 可以做更多的事情,在 Simpleframework 中 AJAX 组件有以下特点:

  1. 不需要或少量的 js 代码,可能在回调函数中配置。
  2. 后台提供了 Handle 接口,开发人员可以专注处理业务逻辑。
  3. 自动处理返回的内容,其中采用动态 js、css 装载技术,不需要关心返回的内容中是否含有 js 或 css。

Simpleframework 提供组件扩展机制:其一,每一种组件都提供了相应的业务接口,用户可以继承并覆盖相应的方法来实现自己的业务需求;其二,如果现有的组件和当前的业务需求确实存在巨大的差异,可以按着组件规范定义一个新的组件,并注册到 Simple 系统中来。

一般而言,这两种扩展机制已能满足绝大多数的用户扩展需求,另外 SimpleFramework 是开源产品,用户还可以在遵循协议的前提下基于源码扩展新的组件实现机制。

InfoQ:据我所知,SSH(Struts+Spring+Hiberate)是目前应用极为广泛的一套框架组合,而且很多程序在这方面都有很深的积累,那么 SimpleFramework 能够与之兼容吗?如果一起使用,您建议二者如何配合使用,即推荐使用 SSH 中的哪些功能、SimpleFramework 的哪些功能?

SD: SimpleFramework 完全可以和 SSH 兼容使用,因为 SimpleFramework 的基于过滤器的“后处理”机制决定了这一点,完全可以将 SimpleFramework 看做 SSH 或 Struts 的一个“过滤器”来应用。

SimpleFramework 与 SSH 配合使用时,建议如下:

SSH

SimpleFramework

Spring:Bean Manager、IoC

Hibernate:ORM

Struts2: FormBean、Action

1) 配置为 Struts 的过滤器。

2) 可以使用 Simpleframework 的核心组件、基本组件和业务组件。

3) 可用 Hibernate 替代 SimpleFramework 的 DAO 层。

4) Struts 的 Action 继承 SimpleFramework 的相关抽象类或实现 SimpleFramework 的接口作为 SimpleFramework 的业务类(Handle Class)。

InfoQ:SimpleFramework 已有哪些成功案例,它最适合于构建哪一类应用系统?

SD:在电力和远洋系统的办公自动化、电信的无线网络优化系统中经过大数据量和大并发用户的实战考验。官方网站即基于 SimpleFramework 组件搭建,目前已经提供:文件存储、个性页面、新闻资讯、社区交流等应用。

以SimpleFramework 的内容组件为基础,可作为构建互联网社区应用的支撑框架。以SimpleFramework 的基本和业务组件为支撑,可作为构建企业应用的Web 框架。

InfoQ:目前有没有该产品的路线图,近期会对 V3 做哪些方面的增强,能否跟我们的读者先透露一下?

SD: SimpleFramework 下一步的 RoadMap 规划如下:

  • 文档补充:对现有 SimpleFramework 文档做进一步的补充和完善
  • 内核优化:优化 SimpleFramework 内核代码,进一步优化 HTML 的解析速度和执行效率。
  • 组件优化:优化核心组件、基本组件,诸如组件代码生成和渲染效能,并添加一些常用的基本组件。
  • 应用服务:以业务组件中的内容组件为基础,为小型互联网社区应用提供快速解决方案(当前主要任务)。
  • 组件完善:完善机构组件、系统组件;将在后续的阶段中择机升级流程组件,以提供完整的流程业务支撑组件。

欲了解更多信息,请访问 SimpleFramework 网站

时至今日,SimpleFramework 的核心团队成员有四人,以下是他们的介绍:

陈侃,是 simpleframework.net 的首席架构师和共同创始人。在 2001 年秋季全面转向对 Java,并对 Java 情有独钟,发起了 simpleframework 开源项目,并参与了许多前沿技术的开发(如 工作流、AOP、脚本语言和 Web 等),技术之外,还有一手飞车绝技,酷爱打羽毛球。

赵贵根,系统过程博士,团队的精神领袖。为团队把控工作重点、难点和方向,曾参与过大型的 HIS 系统、电子病历、零售企业 POS 系统、中小企业 ERP 系统、华北电力和国家知识产权局 OA 系统、国家电网电能采集系统、联通资源管理系统的分析设计和建设过程。目前正从事 SimpleFramework 的开源项目并致力于 SimpleFramework 技术与思想的推广。

陈圩贤,中科院硕士,多年从事安全领域的研究和技术工作。目前致力于 simple 的宣传和推广工作。爱好打球、登山、游泳。

刘彬,目前从事企业信息化方面的研发及架构工作,有 Java 大型开发项目经验,兴趣的技术领域是 SOA、Workflow、J2EE 编程,Simpleframework 的开源项目建设,并致力于 Simpleframework 问题的解决和技术推广。


感谢崔康张凯峰对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家加入到 InfoQ 中文站用户讨论组中与我们的编辑和其他读者朋友交流。

2010-12-01 00:007320
用户头像

发布了 184 篇内容, 共 76.7 次阅读, 收获喜欢 7 次。

关注

评论

发布
暂无评论
发现更多内容

学 Go,最常用的技能是什么?打日志

梦想橡皮擦

Python 9月月更

【数独 2】候选数法解数独谜题-挖掘更深的信息-C++实现

清风莫追

9月月更

AOP

平凡人生

「技术人生」第9篇:如何设定业务目标

阿里巴巴中间件

阿里云 业务 技术文章

08_Linux基础-vim-tmux-字符编码

mycpen

Linux

09_Linux基础-SHELL-标准输入与标准输出-重定向-管道

mycpen

Linux

Ribbon源码分析之@LoadBalanced与LoadBalancerClient

急需上岸的小谢

9月月更

MobPush 指定页面跳转最佳实现

MobTech袤博科技

ios android intent 页面跳转

Introduction to ByteDance Pitaya

字节跳动终端技术

Python Machine Learning Pitaya ByteDance End Intelligence

03_Linux基础-文件类型-主辅提示符-第1提示符-Linux命令-内外部命令-快捷键-改为英文编码-3个时间-stat-其他基础命令

mycpen

Linux

如何正确理解Java领域中的锁机制,我们一般需要掌握哪些理论知识?

PivotalCloud

【Web前端】怎样用记事本写一个简单的网页-html

清风莫追

9月月更

设计模式的艺术 第十八章解释器设计模式练习(为数据库备份和同步开发一套简单的数据库同步指令,指令可对数据库中的数据和结构进行备份。例如,输入指令“COPY VIEW FROM srcDB TO desDB”表示将srcDB中所有视图对象复制至desDB)

代廉洁

设计模式的艺术

开源IM项目OpenIM单聊及万人群压测报告

Geek_1ef48b

金融网络安全体系建设

阿泽🧸

9月月更 安全体系建设

中国智能网联汽车信息安全分析2022案例征集

易观分析

汽车 案例征集 智联网

06_Linux基础-NGINX和浏览器、网页的关系-云服务器ssh登陆-安装NGINX-上传网页-压缩命令-xz-gzip-bzip2-zip-tar-配置NGINX服务器支持下载功能-备份脚本

mycpen

Linux

《数据结构》线性表之顺序表的实现(C语言)

孤衫

数据结构 C语言 9月月更

【大话C语言】分支与循环语句

Albert Edison

C语言 开发语言 for循环 if语句 9月月更

k8s自定义controller三部曲之二:自动生成代码

程序员欣宸

Kubernetes k8s 9月月更

C++学习------cctype头文件的作用与源码学习

桑榆

c++ 9月月更

07_Linux基础-计划任务-备份脚本-变量定义和使用

mycpen

Linux

海泰方圆成功举办“引领数据安全创新,加速数字经济发展”技术研讨会

电子信息发烧客

二维容器进行图的DFS搜索和BFS搜索-C++STL模板

清风莫追

c++ 算法 9月日更 9月月更

为什么这么多品牌迫切想要改变Logo?

Jackpop

Alluxio入选英特尔AI百佳创新激励计划

Alluxio

人工智能 创新 英特尔 Alluxio 9月月更

高端手机市场的诸神之战,vivo举起一把“雷神之锤”

脑极体

高颜值!程序员专属浏览器

Jackpop

微服务为什么需要混沌工程

穿过生命散发芬芳

混沌工程 9月月更

2022-09-02:以下go语言代码输出什么?A:9;B:11;C:编译错误;D:不确定

福大大架构师每日一题

golang 福大大 选择题

计网复习一,计算机网络原理概述

前端小刘不怕牛牛

计算机网络 计算机基础 HTTP 9月月更

采访开源Web框架SimpleFramework开发团队_Java_马国耀_InfoQ精选文章