SimpleFramework框架高级特性之组件开发

开发 后端
本篇文章介绍了SimpleFramework框架高级特性之组件开发,请大家参考。

Simple组件是基于Web的,凡是和Web相关的UI或业务逻辑,都可以成为Simple组件。

单一的后台逻辑是Simple组件不支持的,比如建立一个网络连接、访问数据等,但这些业务逻辑和前端Web关联起来,比如基于Web的网络流量监控,就可以成为Simple组件。

Simple组件隐藏了前端Web(HTML、Javascript、CSS等)的复杂性,同时,又为后端逻辑提供了一致、可操作的业务逻辑接口,并且开发者可以自由的设计这些接口。

Simple组件是开放的、友好的,任何开发者都可以很容易按照规范来开发自己的组件。

需要实现的四个接口

自定义组件,必须实现以下四个接口(类):

接口IComponentRegistry

定义组件的注册类实例,并在系统初始化的时候注册到系统注册表里,这样,自定义组件就可以使用了。代码如下:

 

  1. ComponentRegistryFactory.getInstance().regist(new YourComponentRegistry(servletContext)); 

IComponentRegistry主要函数的定义及说明:

 

  1. String getComponentName();  
  2. 组件的名称,这个值就是在XML描述中声明的组件标签,且必须***  
  3.  
  4. IComponentRender getComponentRender();  
  5. 获取组件的渲染器实例,详细见下  
  6.  
  7. IComponentResourceProvider getComponentResourceProvider();  
  8. 获取组件的资源提供者实例,详细见下  
  9.  
  10. AbstractComponentBean createComponentBean(PageParameter pageParameter, Element component);  
  11. 创建组件的元信息定义实例。组件的元信息来自XML描述文件,该实例将按XML中的定义来初始化Bean的属性 

 

接口IComponentResourceProvider

组件的资源提供者,该接口主要定义组件运行所必须依赖的资源环境,这些资源包括Javascript、CSS、jar或其它已注册的组件等。

IComponentResourceProvider主要函数的定义及说明:

 

  1. ZipInputStream getRequiredResource();  
  2. 以Zip的方式获取组件所需要的全部资源。一个典型的目录结构可能如下:  
  3. ZIP  
  4.   |--jsp  
  5.   |--css  
  6.   |--images  
  7.   |--flash  
  8.   |--jar  
  9.     
  10. String getResourceHomePath();  
  11. 获取组件资源被部署以后的Web访问路径。比如,你想获取组件资源中的图片路径,可以通过以下代码访问:  
  12. request.getContextPath() + getResourceHomePath() + “/images/t.png”  
  13.     
  14. String[] getCssPath(PageRequestResponse requestResponse);  
  15. String[] getJavascriptPath(PageRequestResponse requestResponse);  
  16. String[] getJarPath();  
  17. 声明组件所依赖的特定资源,这些资源将被系统适当的加入响应到浏览器的HTML中  
  18.     
  19. String[] getPageJavascriptPath(PageRequestResponse requestResponse);  
  20. String[] getPageCssPath(PageRequestResponse requestResponse);  
  21. 和上面是一样,声明组件所依赖的特定资源,区别在于路径是基于请求资源的,可以引用其它组件的  
  22. Javascript和css资源  
  23.  
  24. String[] getDependentComponents();  
  25. 获取组件资源所依赖的其它已注册组件。比如,一个业务选择窗口需要依赖基本的窗口组件 

 

接口IComponentRender

组件渲染器,该接口负责向浏览器产生HTML(通过IComponentHtmlRender渲染)或者Javascript代码(通过IComponentJavascriptRender渲染)。

组件渲染器还有一个重要的作用就是调用Handle中定义的业务逻辑。

IComponentHtmlRender主要函数的定义及说明:

 

  1. String getHtml(ComponentParameter compParameter);  
  2. 获取组件被渲染的HTML  
  3.       
  4. String getHtmlJavascriptCode(ComponentParameter compParameter);  
  5. 获取额外的相关Javascript代码 

 

IComponentJavascriptRender主要函数的定义及说明:

 

  1. String getJavascriptCode(ComponentParameter compParameter);  
  2. 获取组件被渲染的Javascript代码 

 

类AbstractComponentBean

组件的描述(元)信息类。组件的描述信息是由组件开发者根据组件的特定要求而设定的,组件的描述信息来自XML描述文件,开发者必须按XML中的定义来初始化组件Bean的属性,参考接口IComponentRegistry中的定义。

定义XML Schema

XML Schema主要是验证XML描述文件的正确性,借助Eclipse等IDE工具,可以更准确快捷的编写组件的定义属性。

组件开发者需要为组件添加XML Schema支持,并包含在simple .xsd文件里。

定义Handle

Handle是组件业务的核心处理类,是留给用户的接口来联系组件行为的通用方式。Handle的设计由组件开发者来完成,这样可以根据组件的行为设计出更适合的、更易操作的业务逻辑。很多Web框架仅仅提供了Action之类的控制器,对于业务开发者来讲,需要做的事情就太多了,Handle明确了该关心什么,并且如何去做。

举一个具体的实例。“数据分页”是动态处理大量数据集的一种有效方式,下面是IPagerHandle的定义:

 

  1. int getCount(ComponentParameter compParameter);  
  2.               
  3. void process(ComponentParameter compParameter, int start);  

 

IPagerHandle仅仅定义了两个业务函数接口:getCount获取结果集的总数,process处理游标的当前位置为start的结果集。结合PagerBean的定义(每页的显示数量等),就可以很容易计算出当前显示页的数据集。

Handle必须继承自接口IComponentHandle,IComponentHandle定义了一些缺省的组件业务行为。

责任编辑:金贺 来源: SimpleFramework.net
相关推荐

2011-04-22 10:50:18

SimpleFrame

2011-04-21 10:59:44

SimpleFrameWeb

2011-04-29 14:30:05

2011-04-29 10:58:11

SimpleFrame

2011-04-22 10:13:35

SimpleFrame

2011-04-28 10:45:39

SimpleFrame

2011-04-29 09:33:22

SimpleFrame

2011-04-22 10:01:59

SimpleFrame

2011-04-22 09:48:51

SimpleFrame

2011-04-22 10:34:09

SimpleFrame

2012-08-28 09:54:35

SilverlightRapidSLSilverlight

2017-05-26 10:15:39

Java高级特性反射

2010-05-19 09:09:33

2019-01-15 14:11:50

Android框架组件化

2011-05-20 10:15:06

JDK7

2019-07-12 08:49:04

MySQ数据库Redis

2010-08-06 09:18:14

Flex

2016-03-23 11:05:58

Socket开发框架分析

2011-04-29 14:53:56

SimpleFrame

2012-07-30 09:32:00

Web
点赞
收藏

51CTO技术栈公众号