JPivot中的设计模式

来源:百度文库 编辑:神马文学网 时间:2024/04/29 07:09:21
转载:http://blog.csdn.net/Mr_JBean/archive/2008/10/15/3081412.aspx
简介JPivot - 是一个自定义的JSP的标签库,可以用来在JSP页面中嵌入OLAP表格和图表。用户可以执行典型的OLAP导航,如下钻,切片和切块。它使用Mondrian 作为其OLAP服务器。 相关介绍性网址:JPivot Home: http://JPivot.SourceForge.netMondrian Home: http://mondrian.SourceForge.netBlogs: http://blog.donews.com/eckal/http://www.bloghome.cn/index.php?op=ViewArticle&articleId=326&blogId=19
JPivot 的MVC结构

    从Web应用的架构来讲,JPivot完全遵循MVC结构,甚至十分苛刻。为了减少对特定第三方框架的以来,JPivot自己实现了MVC框架,但它可以与其它MVC框架共同使用。

1.模型Model:
JPivot的Model部分处理Olap的模型定义,查询及结果集;JPivot自己定义了一个Olap模型,然后分别提供了Mondrian及XML/A的JPivot model实现,这两个实现又通过Adapter与Mondrian系统及xml/a系统交互。

2.视图View:
JPivot的View部分比较丰富,包括JPivot taglib、wfc taglib定义及相关的UI Component助手类。用户可以在自己的JSP中使用tag构建新的视图。与其它Web框架不同的是JPivot在该层次提供了大量的Web组件,类似于JSF那样。

3.控制器Controller:
JPivot的控制器部分非常有特色。在JPivot中,使用单件模式(Singleton)在每个用户的HttpSession中维护唯一一个WcfController对象,然后以此对象为根,使用Composition模式,将所有的控件请求处理的RequestFilter组织成树形结构。

在JPivot中,所有的UI控件操作都使用DispatcherSupport来维护处理该控件中UI交互的一个或多个Handler(比如表示表格中扩展钻取的“+”图标的DrillExpandUI类中的dispatcher属性与ExpandHandler内部类),而每个UI控件的dispatcher又在其父控件的dispatcher中注册。JPivot根据客户端操作所请求的URL在以WfcController为根的RequestFileter树中查找对应的处理器。

Decorator模式

  1. OlapModel类与OlapModelDecorator类构成Decorator模式,JPivot基于OlapModelDecorator为OlapModel提供了两种装饰器:

§  OlapModelProxy对在HttpSession中唯一添加OlapModel提供了支持,并限制了其它对象对OlapModel的初始化与重置操作;增加了OlapModel在改变时通知注册的Listener所发生的改变这一职责。

§  CachingOlapModelOlapModel提供了在一定的周期内(Model没有发生改变时)缓存Result结果集的职责。

PartBuilder类与PartBuilderDecorator类构成Decorator模式,具体的装饰器比较多,但装饰器都是针对特定的Part来装饰的。通过继承这些装饰器,可以为构建Table的各个部分(行、列、单元格、切片)的xml进行。JPivot结合Apache Digester,使我们可以不用修改任何现有代码,仅需实现这些装饰器及对应TableExtension就可以对所生成的Olap Pivot Table在UI表现上进行扩充,并且可以增加或修改对相应的交互操作进行处理的Handler。

 

 JPivot使用wfc.tree包对成员及层次的树形展示进行支持。JPivot定义了一些装饰来增加树形控件模型的职责。其中:
GroupingTreeModelDecorator装饰增加的职责是在子成员数目比较大的时候,可以分组显示子成员以提高效率。
OptimizingTreeModelDecorator装饰增加的职责是可以根据过滤器(NodeFilter)动态的隐藏掉不满足过滤条件的分支及节点。
SimpleOptimizingTreeModelDecorator装饰增加的职责是当树只有一个顶级根节点的时候,不显示该根节点,而是直接显示第二层的子节点,这样用户就不用每次都要做无谓的展开操作。
CachingTreeModelDecorator装饰增加的职责是当用户在树形中执行展开等浏览操作时,保存用户每次操作请求的数据,形成TreeModel节点的缓存,以提高以后再次操作的相应效率。 

Observer模式

 

在JPivot中,大量使用Observer模式解除视图与模型之间的耦合,处理两者之间的依赖关系及内容与表示同步。

1、Model类及其子类(JPivot自定义Olap 模型的Mondrian实现、xml/a实现)与ModelChangeListener及其子类(表格、钻取/旋转/排序排名等、图形、成员树等展示控件)构成Observer模式(严格的说应该是Listener模式),作用是在模型发生改变时,同步更新所有的UI控件展示。