`

DAO模式和抽象工厂模式在系统设计中的应用

 
阅读更多
引用
在实际应用中,工厂方法用得比较多一些,而且是和动态类装入器组合在一起应用。


设计模式之Factory
http://www.jdon.com/designpatterns/designpattern_factory.htm

简单工厂模式讲解及实例:
http://www.cnblogs.com/zzj-46000452/archive/2006/09/16/506286.html

Java设计模式圣经连载(01)-简单工厂模式
http://lavasoft.blog.51cto.com/62575/11345

http://beniao.blog.51cto.com/389148/102304

http://www.ahcit.com/lanmuyd.asp?id=3069

简单工厂,工厂方法与抽象工厂区别体会
http://www.cnblogs.com/millen/archive/2009/02/13/1389974.html

DAO模式和抽象工厂模式在系统设计中的应用

刘锋  王琼瑶
(南通职业大学电子工程系,江苏 南通 226007)

    摘   要 业务变更和技术发展对软件系统的可扩展性和可维护性提出了高要求。本文以购物车系统为例,将DAO模式和Abstract Factory模式用于业务层的设计,使系统具有更强的灵活性。
    关键词 DAO;工厂模式;MVC;数据源


1 引言

    好的设计模式给系统提供一条可行方案的同时,也可大大降低其实现难度,还为后期的维护和升级提供灵活性。目前居于主流的设计思想是MVC[1]模式,但MVC模式仅仅给出了一个系统层次划分的总体思想,达到应用层、控制层、模式层的分离。如何灵活的实现之,则方法各异。本文的设计是在MVC框架下,对于业务层的设计结合DAO模式[2]和Abstract Factory模式[3],使系统框架更灵活,方便业务的变更和维护。
    利用DAO模式和Abstract Factory模式,本设计方案可解决如下问题:
    (1)对数据源的完成透明性。
    (2)方便的用户功能扩展性。
    (3)方便的维护性。
    (4)灵活的系统参数配置。
2 DAO模式和工厂模式

2.1 DAO模式

    DAO模式(Data Access Object数据访问对象),主要是描述对象的访问方式。它隐藏了底层的数据库访问细节。通过DAO组件,可实现业务逻辑和数据库访问的分离,避免业务逻辑与具体的数据库访问实现耦合,使业务逻辑层更加专注于业务逻辑,而无须理会持久层的实现细节。其基本原理如图1所示。



图1 DAO原理图

    图1是DAO简单原理图,其表达的核心思想有:
    (1)业务对象BusinessObject,DAO,数据访问层DAL分离。
    (2)业务对象BusinessObject通过DAO完成业务操作。
    (3)若需要持久化操作的,DAO调用DAL来完成持久化。
    (4)业务层BLL通过传递JavaBean/BO[4]与DAO层通信。
2.2 工厂模式

    工厂就是生成产品(对象)的地方,与类的构造函数有点类似。对于复杂的对象生产过程,比如按条件生成不同的对象实体时,不适合用类的构造函数实现(这样会导致构造函数过于复杂),进而用工厂方式代替。工厂模式其简单的实质性的内容就是:提供创建对象的接口,工厂按用户需求定制产品。
    工厂模式分工厂方法(Factory Method)和抽象工厂(Abstract Factory)。这两个模式区别在于需要创建对象的复杂程度上。简单工厂模式是由工厂类按用户条件直接生产相应的业务对象;而抽象工厂类则只定义相关获取业务对象的抽象方法,具体实现延迟到其子类体实现。当创建对象的方法变得复杂了,可将工厂类变成抽象类。
    图2就是一个简单工厂的例子,ComputerFactory按用户的要求生成相应的计算机;图3是一个抽象工厂的例子,抽象工厂AbstractFactory只声明了生成CPU和RAM的抽象方法,具体如何实现,则由指定的厂商按自己的规范生成。



      

    
                         图 2   简单工厂                                             图 3  抽象工厂

3 购物系统设计

    明确了DAO模式和Abstract Factory模式的基本思想,下面以购物车为例,阐明该模式在系统设计中的应用。本文的所有设计在Jdk1.6 + MyEclipse6.1 + Tomcat6.0 + MySql5.0下实现。
本文选取购物车[5]作为阐述例子,是鉴于该类系统:
    (1)业务多样性(图书、服装、电子产品,等等)。
    (2)后台数据库的多样(SqlServer2000、SqlServer2005、MySql、Oracle等等)。
    (3)业务变动频繁(不定期、不定时、不定量的商品促销、打折优惠活动)。
3.1 数据源访问控制

    数据源访问层(DAL) [6]主要处理如何管理其连接资源(如:数据连接池),如何提供不同的数据持久化方法,如何记录与数据源交互的重要信息等,最主要的是异常信息,以方便用户的跟踪维护。
    IDataSource接口定义一些持久化操作必须实现的通用接口规范。所有的用户数据源类均实现该接口,提供各自的具体实现方法。考虑到用户可能提供多种不同的数据源实现方式(即不同的IDataSource的子类),为了让用户灵活的选择所需的数据源实现方式,利用数据源工厂DataSourceFactory根据用户的配置文件config.xml的factory结点的dataSource属性值指定的数据源名称,通过反射机制[7]生成不同的数据源操作对象,返回一个统一接口DataSource。具体数据源操作由哪个子类提供,通过函数工厂屏蔽掉。
    在此提供了一个通用的数据源GeneralDataSource实现简单的持久化操作,用户可以扩展自定义的数据源实现方式,也可以从该类扩展,重载相关实现方法。
    考虑到日后的维护方便,在此设计日志记录类,来记录用户的操作过程或数据库的相关信息。日志文件的实现方式可以根据用户配置文件config.xml利用参数控制。其设计思想如图4所示。

图 4  数据访问层

3.2 业务层DAO的设计

    按照DAO的思想,将业务操作按功能分类,用接口方式规范化。与业务操作方法交互的途径是传递业务信息对象。
    所有具体的数据访问对象均实现相应的业务操作接口。各个数据访问对象接收实体对象,并对其进行操作,对于需要持久化的,调用DataSourceFactory生成相应的数据源操作对象。其各对象的关系如图5所示。
    ICustomerDAO,IOrderDAO等定义规范的业务操作接口;MySqlCustomerDAO,MySql5OrderDAO等是不同的数据库对业务操作的具体实现,若业务有需要持久化操作的,利用DataSourceFactory工厂生成数据源对象;Customer,Order等表示传递给相应业务方法的实体信息对象。



图 5  DAO在系统中的应用

    为了使购物车系统不依赖于单一数据库系统,使其具有方便的迁移性和灵活的扩展性,在此使用抽象工厂模式思想:即定义抽象方法DAOFactory返回数据访问对象接口,根据用户的需要,由该抽象工厂生成一个具体的数据库工厂,由具体的数据库工厂生成所有的数据访问对象。可以通过配置config.xml文件的相关片段,来选择应用哪个数据库。
    如图6所示,将相应的业务操作,分类封装为不同的接口以规范其实现方式,如ICustomerDAO,IOrderDAO等,不同的数据库系统可以根据自己的特点,用各自特有的方式实现各个业务接口。而业务逻辑层(BLL层)则接收用户的输入参数,封装成相应对象,传递给相应的业务方法。

图 6  抽象工厂在系统中的应用

3.3 系统参数配置  

    关于系统参数,为了保证以后方便维护,在设计中参数由配置文件config.xml提供,并设置框架文件config.xsd[8]对其进行验证。对于验证不合格的配置文件,系统参数读取失败,直接抛出ConfigFileFormatException,中止系统的运行,如图7所示。
    本系统的配置文件config.xml主要内容如下:
    <configuration><log><!--有关日志文件的配置参数--></log><factorys><factory name="mysql5" type="test2.shopping.factory.MySql5DAOFactory" datasource="test2.shopping.datasource.GeneralDataSource"><driverclassname>com.mysql.jdbc.Driver</driverclassname><url>jdbc:mysql://localhost:3306/test</url><username>root</username><password>123456</password></factory><!--可以继续配置其它数据库方式--></factorys></configuration>


图 7  系统参数
    以MyEclipse6.1下实现为例,在系统开始运行之前,配置站点的web.xml[9]文件,为其加入全局配置参数,指定配置文件的存放位置,并指定具体使用使配置文件中的哪个数据源:
  <context-param><param-name>configFilePath</param-name><param-value>\config\config.xml</param-value></context-param><context-param><param-name>factoryName</param-name><param-value>mysql5</param-value></context-param>
    其中configFilePath指定配置文件的存放路径,若用户不指定,则默认为本站点根目录下的\config\config.xml文件。
    factoryName参数指定读取配置文件中的哪一个factory片段参数作为与数据源的连接。该参数必须指定,而且名称必须与config.xml中factory的属性name的值一致。
    当系统启动时,读取web.xml中的参数,得到配置文件的路径,再解析配置文件,将相关参数以静态形式存放在类SystemParams中。
4 小结

    通过DAO模式加Abstract Factory模式在业务层设计中的使用,该购物车系统具有两个明显优点:
    1)调用方式简洁,规范
    配置好config.xml配置文件和web.xml文件后,如在CustomerBLL对象中需要取得所有的客户资料,则可按如下方式调用:
    Customer[] custArr  = DAOFactory.getDAOFactory(). getCustomerDAO().getCustomerList();
    2)灵活的扩展性
    (1)根据不同的数据库平台,用户可以提供自己的数据库实现方式(或从原有的数据库实现方式继承实现,只需重载其相应实现方法即可),通过修改配置文件即可完成数据库的迁移。
    (2)若修改了客户的数据表字段内容,则只需要修改Customer与实现了ICustomerDAO的子类,但业务层的调用接口形式不变。
    (3)对于业务的扩展,只需要在业务接口中进行添加方法,修改相关业务类,然后在BLL层调用相应方法。
    (4)若用户提供了自己的数据源实现方式(通过实现IDataSource接口或继承已有的GeneralDataSource而来),修改配置文件config.xml的factory的dataSource属性为该类完整路径即可。
    总之,将DAO模式和Abstract Factory模式用于系统设计中,可提供强大的灵活性。
    3)展望
    在系统设计中,复杂的设计模式并不是系统设计的必须选择。但对于业务逻辑复杂,业务变动频繁的系统,采用DAO模式结合Abstract Factory可以使系统层次分明,并且方便以后的维护升级。目前对于DAO的第三方插件十分丰富(如Hibernate[10]),用户也可直接将其应用于自己的系统。
参考文献

    [1]孙卫琴.精通struts:基于MVC的Java Web设计与开发[M]. 北京:电子工业出版社. 2004:9-10
    [2]Sun corp. Core j2ee patterns[OL]. http://java.sun.com/blueprints/corej2eepatterns/Patterns /DataAccessObject.html.2004
    [3]马树奇,金燕.J2EE1.4编程指南[M]. 北京:电子工业出版社. 2005:568-574      
    [4]孙卫琴.精通Hibernate:Java对象持久化技术详解[M]. 北京:电子工业出版社. 2005:89-102
    [5]薛万欣.电子商务网站建设[M]. 北京:清华大学出版社. 2007:104-129
    [6]孟亚辉,张党进.一种基于ORM理论的DAL设计与实现[C]. 广东:茂名学院学报. 2008,18(4):1-3
    [7]Bruce Eckel. Thinking in Java 4[M]. Prentice Hall PTR .2006:441-459
    [8](美)H.M.Deitel&P.J.Deitel .XML 编程技术大全[M]. 康博[译]. 北京:清华大学出版社. 2002
    [9] 高守传.精通Eclipse Web开发-Java体系结构、工具、框架及整合应用[M]. 北京:人民邮电出版社. 2006:305-612
    [10] 夏昕.深入浅出Hibernate. 出版地不详.2008
    收稿日期:11月10日   修改日期:11月14日
分享到:
评论

相关推荐

    GUI面板MATLAB香烟汉字识别.zip

    GUI面板MATLAB香烟汉字识别

    2023年统招专升本计算机考试真题及答案6.pdf

    2023年统招专升本计算机考试真题及答案6.pdf

    Java毕业设计-SpringBoot+Vue的“漫画之家”系统(附源码、数据库、教程).zip

    Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)

    基于ssm+vue的教学视频点播系统(java毕业设计,包括源码,数据库,教程).zip

    Java 项目, Java 毕业设计,Java 课程设计,基于 SSM 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:vue/html5 后台框架:SSM 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4

    Java毕业设计-基于SpringBoot+Vue+MySql的五台山景点购票系统(附源码、数据库、教程).zip

    Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)

    MATLAB设计的危险区域预警系统(GUI界面设计).zip

    MATLAB设计的危险区域预警系统(GUI界面设计)

    2023年江苏省计算机二级VB试卷.pdf

    2023年江苏省计算机二级VB试卷.pdf

    NSCBx1.0.1b Keys19.0.0.zip

    NSCBx1.0.1b Keys19.0.0.zip

    智慧园区一卡通与清分结算系统Word(45页).docx

    智慧园区,作为现代化城市发展的新兴模式,正逐步改变着传统园区的运营与管理方式。它并非简单的信息化升级,而是跨越了行业壁垒,实现了数据共享与业务协同的复杂运行系统。在智慧园区的构建中,人们常常陷入一些误区,如认为智慧园区可以速成、与本部门无关或等同于传统信息化。然而,智慧园区的建设需要长期规划与多方参与,它不仅关乎技术层面的革新,更涉及到管理理念的转变。通过打破信息孤岛,智慧园区实现了各系统间的无缝对接,为园区的科学决策提供了有力支持。 智慧园区的核心价值在于其提供的全方位服务与管理能力。从基础设施的智能化改造,如全面光纤接入、4G/5G网络覆盖、Wi-Fi网络及物联网技术的运用,到园区综合管理平台的建设,智慧园区打造了一个高效、便捷、安全的运营环境。在这个平台上,园区管理方可以实时掌握运营动态,包括道路状况、游客数量、设施状态及自然环境等信息,从而实现事件的提前预警与自动调配。同时,智慧园区还为园区企业提供了丰富的服务,如项目申报、资质认定、入园车辆管理及统计分析等,极大地提升了企业的运营效率。此外,智慧园区还注重用户体验,通过信息发布系统、服务门户系统及各类智慧应用,如掌上营销、智慧停车、智能安防等,为园区员工、企业及访客提供了便捷、舒适的生活与工作体验。值得一提的是,智慧园区还充分利用大数据、云计算等先进技术,对园区的能耗数据进行采集、分析与管理,实现了绿色、节能的运营目标。 在智慧园区的建设过程中,还涌现出了许多创新的应用场景。例如,在环境监测方面,智慧园区通过集成各类传感器与监控系统,实现了对园区水质、空气质量的实时监测与预警;在交通管理方面,智慧园区利用物联网技术,对园区观光车、救援车辆等进行实时定位与调度,提高了交通效率与安全性;在公共服务方面,智慧园区通过构建统一的公共服务平台,为园区居民提供了包括平安社区、便民社区、智能家居在内的多元化服务。这些创新应用不仅提升了园区的智能化水平,还为园区的可持续发展奠定了坚实基础。同时,智慧园区的建设也促进了产业链的聚合与发展,通过搭建聚合产业链平台,实现了园区内企业间的资源共享与合作共赢。总的来说,智慧园区的建设不仅提升了园区的综合竞争力,还为城市的智慧化发展树立了典范。它以用户需求为导向,以技术创新为驱动,不断推动着园区向更加智慧、高效、绿色的方向发展。对于写方案的读者而言,智慧园区的成功案例与创新应用无疑提供了宝贵的借鉴与启示,值得深入探索与学习。

    数据库系统课程设计报告-商品供应管理系统设计与开发

    一、系统需求分析 1 (一)需求概述 1 (二)业务流分析 1 (三)数据流分析 3 (四)数据字典 3 二、数据库概念结构设计 5 (一)实体分析 5 (二)属性分析 5 (三)联系分析 6 (四)概念模型分析(.PDM图) 7 三、数据库逻辑结构设计 8 (一)概念模型转化为逻辑模型 8 1.一对一关系的转化 8 2.一对多关系的转化 8 3.多对多关系的转化 8 (二)逻辑模型设计(.PDM图) 8 四、数据库物理实现 9 (一)表设计 9 (二)创建表和完整性约束代码设计 10 (三)创建视图、索引、存储过程和触发器 11 五、数据库功能调试 12 (一)职工管理模块 12 (二)工程负责人管理模块 13 (三)系统管理员管理模块 15 六、设计系统前台软件 20 (一)开发软件选择 20 (二)软件功能要求与设计 21 (三)软件功能实现 21 (四)系统测试 27 七、设计总结 28

    springboot校园在线拍卖系统.zip

    ava项目springboot基于springboot的课程设计,包含源码+数据库+毕业论文

    【人机交互】MATLAB手势识别设计.zip

    【人机交互】MATLAB手势识别设计

    【工程项目】MATLAB的人脸+指纹融合系统(结合人脸和指纹一致性方可通行).zip

    【工程项目】MATLAB的人脸+指纹融合系统(结合人脸和指纹一致性方可通行)

    2023年历年真题考试:管理系统中计算机应用历年真题汇编(共207题).pdf

    2023年历年真题考试:管理系统中计算机应用历年真题汇编(共207题).pdf

    sprinmgboot实习管理系统--论文.zip

    ava项目springboot基于springboot的课程设计,包含源码+数据库+毕业论文

    【人机交互】MATLAB信号与系统数字信号设计.zip

    【人机交互】MATLAB信号与系统数字信号设计

    Delphi 12.3控件之Chatbox-1.9.8-Setup.rar

    Delphi 12.3控件之Chatbox-1.9.8-Setup.rar

    HD-Speed绿色版是一款功能强大的磁盘读取速度测试软件,这款软件可以帮助用户经行磁盘检测、分析、清理等功能,需要的朋友欢迎来绿色资源网下载使用

    HD_Speed是一款非常小巧好用的实时磁盘读取速度测试软件。它可以比较准确地测试到磁盘的持续传输率和突发传输率一定程度上反映系统的磁盘性能,可以测试软盘、硬盘、光驱。并用曲线图方式体现出来,用它可以很直观的看出您的硬盘到底有多快而且也可以很方便的看出光驱的加速曲线。并且作为一款免费软件,测试也相当简单,大家有兴趣可以测试一下自己的磁盘性能。 HD_Speed绿色版 HD_Speed绿色版功能介绍 ●任何目录可以在Finder(即在本地机器上,一个外部驱动器或远程服务器上)可以选择立即分析。 ●自由航行在一个文件夹或子目录的分析装置。 ●平滑的动画之间的转换选定的目录管理。 ●移动鼠标到一个文件中看到它的名称和尺寸。 ●使用上下文菜单中选择文件的垃圾。 ●快速搜索文件名。 ●保存您最喜爱的位置和访问他们在主窗口中单击。

    基于SSM+JSP的高校四六级报名管理系统+数据库(Java毕业设计,包括源码,教程).zip

    Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:jsp 后台框架:SSM 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4

    GUI面板MATLAB芯片字符识别.zip

    GUI面板MATLAB芯片字符识别

Global site tag (gtag.js) - Google Analytics