Rich Component

组件是提升软件复用度,进而提升软件开发效率最主要的手段。但令人遗憾的是,在B/S架构的开发模式下,并没有一种标准的且获得业界广泛认可的组件技术。

回顾C/S架构下的UI编程,我们获得的最主要的经验是:

1) 基于组件(也叫控件)来构建UI。以 Swing 为例,一个GUI界面,父容器可能是个JFrame,其中包含一个JPanel,JPanel里面又有JButton、JTextField 等等。

2) 组件构成的UI接受用户的操作,并产生事件,在事件响应中调用业务逻辑。还是以Swing 为例,一个JButton,可能会增加一个ActionListener,并在 ActionListener中调用后台的业务逻辑。

但在 B/S 架构下,情况就不一样了,究其原因:

1) 页面是基于HTML的,而HTML诞生的最初目的是“信息的发布媒介”,缺乏种种丰富的UI组件。如:HTML缺乏树、MenuBar、日期选择框等组件。

2) 客户端与服务器端之间的通讯依赖的是无状态的HTTP协议,客户端事件无法有效的传递到服务器端。

换言之,多年来C/S架构下UI的开发经验,无法有效的在B/S架构下继承并发扬光大。于是,传统的B/S架构的开发主要是基于流的开发模式。

以 Servlet 为例,你在程序中通过HttpServletResponse获得 ServletOutputStream,而你所做的最主要的工作是:out.println("<html><body>...");。

很快,人们发觉这种模式的开发效率低下,于是,出现了 JSP,允许在页面中嵌入<%%>代码片断,但实际上, JSP 所做的最主要的工作无非是简化了 out.println 的写法而已。

综上所述,无论是 JSP还是Servlet,其本质并没有变,那就是:基于流的编程。多年积累下来的C/S架构的开发经验,并没有有效传递到B/S架构的开发上。

而OperaMasks所要做的则是:充分吸纳C/S架构的开发经验,以提升B/S架构的开发效率,主要体现在:

1) UI(Web页面)不再是基于流的拼凑,而是基于组件来构建。这里的组件,在 OperaMasks 中称之为“Rich Component”。

2) 组件构成的UI依然可以接受用户的操作并产生事件,并能够在事件响应中调用后台的业务逻辑。

当然,OperaMasks 并不试图完全的模拟C/S架构,毕竟B/S架构与C/S架构还是有很大的区别,以事件为例,B/S架构的事件是客户端事件,也就是说, 是需要通过 JavaScript 来响应的事件,在 OperaMasks 中,你依然可以通过 JavaScript 来响应事件,也可以通过 <ajax:action>将客户端事件转换为服务器端 事件,来调用后台的业务逻辑。

当然,OperaMasks所包含的技术特性很多,但本章节主要强调:在OperaMasks中的Web页面,是基于组件编程的。

[上一页] [下一页]