NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

采访开源 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:007323
用户头像

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

关注

评论

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

面试突击34:如何使用线程池执行定时任务?

王磊

java面试

Ant Design Landing

云原生

SaaS React Ant Design Landing page

Vue

wudaxue

一文了解MySQL的Buffer Pool

华为云开发者联盟

MySQL 缓存 缓冲池 Buffer Pool 脏页

电商系统微服务拆分

Geek_8d5fe5

「架构实战营」

AliSSR 语音超分算法:让在线会议语音更明亮更自然

阿里云视频云

阿里云 音视频 智能降噪 音频3A 音频算法

最佳代码扫描工具,实现自动化代码扫描服务

阿里云云效

云计算 阿里云 开发 代码扫描 代码安全

《LeetCode刷题报告》题解内容Ⅰ

謓泽

3月月更

go 1.18 bufio 包中的 Writer.AvailableBuffer

黑客不够黑

go 1.18 Writer.AvailableBuffer

洞见科技参编的中国信通院《联邦学习场景应用研究报告》正式发布

洞见科技

联邦学习 隐私计算 中国信通院 洞见科技

实时渲染大赛结果将于3月31日晚8点B站直播公布,敬请期待!

3DCAT实时渲染

实时渲染 3D动画

重视软件开发的黑匣子

菜根老谭

bug 系统安全 程序日志

浏览器原理

wudaxue

css

wudaxue

AppCube低代码快速开发健康打卡应用

DS小龙哥

3月月更

ABAP 简易弹出输出/输入框

Jasen Ye

Input abap decide CONFIRM

java培训JVM面试题分享

@零度

JVM JAVA开发

web前端培训使用 Vue3来实现文章目录功能

@零度

Vue 前端开发

适合 Kubernetes 初学者的一些实战练习(二)

Jerry Wang

Kubernetes 云原生 Kubernetes 集群 Serverless Kubernetes 3月月更

Java中的序列化安全漏洞梳理

陈德伟

Java 安全 编程语言、 序列化机制

适合 Kubernetes 初学者的一些实战练习(一)

Jerry Wang

云原生 #Kubernetes# Kubernetes 集群 Serverless Kubernetes 3月月更

时间轮原理及其在框架中的应用

vivo互联网技术

服务器 时间轮

【前端架构必备】手摸手带你搭建一个属于自己的脚手架

战场小包

前端 脚手架 3月月更

什么是分支模式 ? 各(类)分支正确的使用方式

阿里云云效

云计算 阿里云 云原生 Feature 分支模式

【高并发】解密导致并发问题的第二个幕后黑手——原子性问题

冰河

并发编程 多线程 协程 异步编程 精通高并发系列

表数据都删了一半,可我的表文件咋还是那么大

华为云开发者联盟

MySQL 文件 innodb 数据页

教你识别一些sequence的相关问题

华为云开发者联盟

序列 GaussDB(DWS) sequence GTM bind关系

哈尔滨市消防救援支队:用宜搭打造消防智慧大脑,守护冰城平安

一只大光圈

低代码 数字化 消防 钉钉宜搭

常见的反爬措施:UA反爬和Cookie反爬

华为云开发者联盟

Python 爬虫 Python爬虫 反爬虫 Cookie反爬虫

大数据培训Hive 提高查询效率的方法

@零度

hive 大数据开发

企业和团队如何创建高效实用的知识管理体系

小炮

知识管理 企业

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