岁月联盟 · 中国技术网 本站主页 | 安全认证 | 用户服务 | 技术论坛
新闻快报 | 新手学堂 | 黑客特区 | 程序语言 | 数 据 库 | 防 火 墙 | 路由交换 | 系统集成 | 服 务 器 | 存储备份 | 考试认证
Windows | Linux | Java | 协议分析 | 问题解答 | 进程大全 | 网页设计 | 多 媒 体 | 图库资料 | 软件下载 | 站内下载
  您现在的位置: 岁月联盟 >> Java >> J2EE >> mvcwea >> Java正文
MVC设计模式在通用报表系统中的应用
作者:未知 文章来源:本站整理 点击数: 更新时间:2007-7-22 22:21:39

图1 报表系统中Observer模式层次结构图

其中业务数据的类定义如下:

  class DataEntry{
  public :
  virtual ~DataEntry();
  virtual void Attach(UserView *pView ); //增加视图
  virtual void Detach(UserView *pView); //删除视图
  virtual void Notify(UserView *pSender); //通知
  protected:
  DataEntry ();
  private:
  List<UserView*> *UserViewList; //记录视图
  }
  显示视图的定义为:
  class UserView{
  public:
  DataEntry getDataEntry(); /*获取业务数据实体的状态,相当于模式中的GetState()和  SetState()*/
  virtual void Notify (UserView *pView);
  virtual void OnDraw(UserView *pView);
  //设计为虚函数以供重载
  protected:
  List<DataEntry*> *DataEntryList;
  //记录业务数据实体
  }

在这里简要说明一下Notify()的实现:

  void Notify:: DataEntry (UserView *pSender){
  ASSERT(pSender==NULL||*UserViewList.IsEmpty()); //判断视图列表是否为空
  POSITION pos = GetFirstViewPosition ();
  While (pos! = NULL)
  {UserView* pView = GetNextView (pos);
  ASSERT_VAILD (pView);
  if (pView != pUserView)
  pView->Notity ();}

3.2 适配器模式(Adapter)

  在许多大型企业及某些行业的局域网或广域网内,由于历史和技术发展的原因存在着多种数据库同时在运行的情况,比如某大型企业、某地区的电力单位或电信公司等,可能正同时在使用着多种数据库(Oracle, DB2, SQL Server, Sybase 或Informix等)。在这样多的数据库并存的环境下,要求能任意访问到这些数据库,实现多种数据库间的数据转化、资源共享、数据一致性和完整性成为系统开发和应用中一个尤为突出的问题。

  构建通用的数据库访问主要是实现对数据源访问的底层操作的封装,而仅仅给出数据读取对象或数据集对象等供商业逻辑层调用,因此采用Adapter模式,根据不同的数据提供者产生相应的数据库连接、数据库命令等数据库对象来实现对低层操作的封装,通过暴露执行数据集对象等上层操作以供其他逻辑层调用。

  对数据库的访问基础是基于结构化查询语言(SQL),在具体对数据库的访问中,是通过SQL语句来实现的。采用这种设计模式对数据库进行访问的方法是一种通用访问技术,即应用程序可用相同的源代码访问不同类型的数据库,如Sybase, Oracle等。

  Adapter模式是将一个类的接口转换成客户希望的另外一个借口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作,它又称为“Wrapper”包装器。当要使用一个已经存在的类,而它的接口不符合需要,或是创建一个可以复用的类,该类可以与其它不相关的类或不可预见的类协同工作。

Adapter模式的基本结构图如图2所示:

图2 Adapter模式的基本结构图

  Adapter模式应用在报表系统中,模式中Target即为应用程序中数据访问类,它负责进行数据库的连接、进行数据库操作等等;模式中的Adaptee为实际存在的各种数据库;在进行系统实现时的主要工作是对不同的数据库编写相应的数据源驱动程序,即编写Adapter。

  应用程序对数据库的访问主要是选择一个数据源并连接它、提交SQL语句以及检索结果,除此以外还可以确定并调整驱动程序的性能、浏览数据库编目等等;应用程序中数据访问类通过数据源驱动程序访问不同数据资源中的数据,每个不同的数据资源类型由一个数据源驱动程序支持。

  数据源驱动程序是处理数据访问类对象的函数调用,提交SQL请求到一个指定的数据元,并把结果返回到应用程序;如果有必要,数据源驱动程序修改一个应用程序请求,以使请求与相关的DBMS支持的语法一致。每个驱动程序都针对特定的DBMS;例如,一个Oracle驱动程序不能直接访问Informix DBMS中的数据。数据源驱动程序展示基础DBMS的能力,他们不能实现DBMS不支持的能力。它进行数据源连接、检查应用程序中的函数错误、初始化事务和把SQL语句提交给执行的数据源。数据源驱动程序必须把应用程序的 SQL修改成针对相应DBMS的SQL,并把数据发送到数据源,或从数据源检索数据,包括根据应用程序的指定来转换数据类型,最后断开与数据源的连接。

  当数据源驱动程序的数量增加,并且处理的事物逐渐复杂时,仅仅用应用程序的数据访问类来进行驱动程序的管理已大大增加了系统的负担,我们可以提供一个驱动程序管理器来管理数据源驱动程序。此时应用程序是被连接到驱动程序管理器,而不是驱动程序。它使用应用程序传递的连接句柄搜索目标驱动程序中的函数地址,并通过地址调用那个函数。驱动程序管理器多数只是把函数调用从应用程序传送给正确的驱动程序。驱动程序管理器最终的作用是加载和卸载数据源驱动程序,应用程序只加载和卸载驱动程序管理器。当它要使用一个特殊的驱动程序时,它调用驱动程序管理器中的连接函数,并指明一个特殊数据源或驱动程序名。使用该名称,驱动程序管理器为驱动程序文件名查询数据源信息,比如SQLSRVR.DLL,然后它加载驱动程序,保存驱动程序中每个函数的地址,并调用驱动程序中的连接函数,然后初始化它自己,并连接到数据源。当应用程序使用驱动程序做完工作后,它调用驱动程序管理器中的SQLDisconnect。驱动程序管理其中调用驱动程序中的此函数,断开与数据源的连接。然而,驱动程序管理器重新连接它时,把驱动程序保留在内存中。只有当应用程序释放驱动程序使用的连接,或者使用不同的驱动程序连接,并且没有器它连接使用此驱动程序时,它才卸载驱动程序。

3.3 桥接模式(Bridge)

  Bridge设计模式时对象结构模式的一种,它将抽象部分与实现部分分离,使它们能够独立实现。当在一个程序中,某一个抽象可以由很多实现方法的时候,我们通常是使用面向对象中继承的方法来实现并协调这些方法。但是这种继承机制有以下不足的地方,而使用Bridge设计模式都能使这些不足得到很好地解决。

  继承机制使客户代码在实现功能的时候涉及到特定的相应平台,与平台产生相关

上一页  [1] [2] [3] 下一页


  • 上一个Java:
  • 下一个Java:
  •  
    热门文章
    推荐文章
    关于我们 | 发展历程 | 网站地图 | 广告服务 | 招贤纳士 | 战略合作 | 友情链接 | 著作声明 | 联系我们
    Copyright © 2002-2007 SYUE All rights reserved.
    E_mail:WebSyue@163.Com 皖ICP备05004589号
    未经授权禁止转载、摘编、复制或建立镜像.如有违反,追究法律责任.
    天龙八部私服 热血江湖私服 天龙八部私服 bet365 魔域私服 劲舞私服 传奇世界私服 bet365 传世私服 传奇世界私服