`
harrison2010
  • 浏览: 108030 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

有必要使用dao时候使用工厂模式和接口吗?

阅读更多
先说明下是怎么使用dao的接口和工厂模式的(甚至包含抽象工厂模式)
1.当我们建立一个系统的时候,我们并不知道将要要用到什么样子的数据库,而且有可能随着
变化我们用到的数据库也有可能就被别的好的数据库代替。这个是使用dao接口及抽象工厂模式的前提
2.比如我们有一个user对象,我么对其操作要建立uerdao,我们仅仅知道对其操作,但是具体的做要要在数据库里面实现,不同的数据库操作不要一样,因此我们分成多种dao。但是这些别的人员并不一定要知道,别人用的是dao,没有必要去知道我用什么数据库来操作。因此uerDAo是个接口
诞生了userMySQLDAO,userOracleDAO等等。有了这些以后,使用者仅仅用个到userDAo的方法就可以
但是新的问题又出现了
3.userdao是一个接口我怎么去使用,我不能new我怎么使用
于是就出来了factory工厂可以魏你建立一个你自己想要的DAO就可以了。factory.getUserMySQLDAO。如果factory是一个一般的类,那么我们必须知道是什么样子的工厂,是mysql的工厂还是oracle的 工厂。
因此要使用抽象工厂模式



辩论:
这样好吗?
这样的factory每次都在用new来创建对象。会不会造成资源的浪费那?
为什么我们不能用一个静态的办法来代替那?
比如我仅仅定义一个userdao的类
分享到:
评论
17 楼 Joo 2008-08-04  
暂且先不要谈Spring IOC,就楼主的本意来谈谈到底应该不应该使用抽象工厂吧
我们老大也让我给做一个通用的IDAO出来以应付多个数据源切换的要求,虽然说一般情况下一个项目更换数据源的可能性非常小,但是这么做的目的其实是为了统一DAO操作接口,更重要的目的是为了在DAO层面上事先不同数据源的事务管理

16 楼 H_eaven 2008-08-04  
切换数据库不仅仅是运行起来的程序今天用MySql明天用Oracle.
还要保证你的程序对A用户可以用MySql,对于B用户可以用Oracle.
如果开发的程序只有一个人用,也没多少地方天天换.
15 楼 cyberblue 2008-07-09  
企业开发一般都用DataSource,根本不需要Class.forName()什么的。

如果用DAO也是封装到EJB里,要换DAO的话换个JNDI就可以了。

用了Hibernate或OpenJPA之后,如果设计得当的话,数据库之间的差异可以忽略不计。
14 楼 bloodrate 2008-07-09  
在实际的项目应用中,数据库的移植是不常见的,基本上没有见过。 如果出现数据库移植,程序的改动是相当大的,不是简单的改变下factory的调用就能完成的。
这种抽象工厂的做法只是作为一种技术存在在spring这种框架中。
性能这方面,没有具体研究不好说。[/quot

数据库是可移植也取决于持久层接口的设计好坏,比如如果Dao有,find(String sql)这样的方法,显然是破坏移植性的,因为开发人员完全有可能传进去一个只有oracle才能执行得语句。。所以除了考虑factory以外,注意接口的设计
13 楼 bloodrate 2008-07-09  
neptune 写道
用spring的ioc都解决于,不用自已想什么DaoFactory


我觉得就算依赖注入也是注入的DaoFactory,没听过注入Dao的,IOC可以说是工厂模式精华体现,但是和传统工厂有本质区别。

工厂一般有两个作用:对对象得创建过程步骤进行统一管理;对对象的创建种类进行统一管理。
我有一次用第三方的邮件开发包连接该公司得邮件服务器,起先没有用工厂,没什么问题正常,可是到后来需要做灾难备份,一台邮件服务器宕机了,使用另外一台,我也没太在意,因为我觉得这个是邮件服务器自带得功能,当右键负责人说这个功能需服务器不提供要我手动完成得时候我抓狂了,因为我需要在每个使用邮件开发包的类的地方加入“如果链接这个邮件服务器失败,则链接另一个”,好一通找。赶紧封装到工厂里。。对于外来得,自己并不熟悉得开发包,使用工厂等价于给自己对这个包可能得任何不理解得地方的空间。

IOC提出的前提,Martin Folwer是这样阐述得,IOC是为了构建web层的可插拔组件而提出得,因为众所周知,人人都想把软件做成零件拼装得形式,可是web项目出于“环境依赖性强”得特点,构件可插拔性弱,IOC致力于解决这个矛盾。

一般工厂和IOC是可以同时使用得。

以上我的见解
12 楼 bloodrate 2008-06-11  
coolfiry 写道
Spring的IOC并不能说解决了不用自己想DaoFactory。设计模式的什么时候都是有用的。

这里我认为还是有必要用抽象工厂的,因为我可以是注入工厂,这样可以更好。
注入不同的工厂就会产生不同的dao对象了。


到底是使用静态工厂还是抽象工厂好呢?“注入不同的工厂就会产生不同的dao对象了”意思是说每个工厂负责产生一种dao,那么为什么不用一个工厂类得各个方法来产生不同dao呢?
11 楼 daquan198163 2008-06-10  
eivenchan 写道
引用
有多少机会需要不停的更换数据库,如果不更换数据库,这个接口还有存在的必要吗!

我觉得有存在的必要,不说系统架构那么高级别的东西,
单是说单元测试就有必要,直接用具体类不能mock,也就不能unit test.

可以的,至少easymock最新版本已经可以了
另外dao单元测试意义不大,最好直接做集成测试,敏捷版讨论过
10 楼 eivenchan 2008-06-10  
引用
有多少机会需要不停的更换数据库,如果不更换数据库,这个接口还有存在的必要吗!

我觉得有存在的必要,不说系统架构那么高级别的东西,
单是说单元测试就有必要,直接用具体类不能mock,也就不能unit test.
9 楼 kjj 2008-06-07  
有多少机会需要不停的更换数据库,如果不更换数据库,这个接口还有存在的必要吗!
8 楼 gnomewarlock 2008-06-06  
我感觉用还是用工厂+OBJECTCACHE的方式比较好,如果不用SPRING的话。
7 楼 coolfiry 2008-04-12  
Spring的IOC并不能说解决了不用自己想DaoFactory。设计模式的什么时候都是有用的。

这里我认为还是有必要用抽象工厂的,因为我可以是注入工厂,这样可以更好。
注入不同的工厂就会产生不同的dao对象了。
6 楼 raykcn 2008-03-08  
这8算月经帖?
5 楼 foy 2008-03-08  
skydream 写道
neptune 写道
用spring的ioc都解决于,不用自已想什么DaoFactory


呵呵,很好的办法,定义接口,代码中针对接口编程,然后用spring将真正的实现注入。

如果实现修改了,只要简单的修改spring的配置文件就搞定。

恩啊,spring IOC很好很强大
4 楼 77tt77 2008-02-19  
是啊

SPRING的IOC的优势就在这里体现了!!

反向控制,或者叫做依赖注入!
3 楼 skydream 2008-02-19  
neptune 写道
用spring的ioc都解决于,不用自已想什么DaoFactory


呵呵,很好的办法,定义接口,代码中针对接口编程,然后用spring将真正的实现注入。

如果实现修改了,只要简单的修改spring的配置文件就搞定。
2 楼 neptune 2008-02-19  
用spring的ioc都解决于,不用自已想什么DaoFactory
1 楼 zzxplayful 2008-02-18  
如果你的Dao工厂使用很频繁,你可以使用对象池来处理啊,或者单态也可以阿

相关推荐

    java DAO模式实现 附源码

    5. **工厂类(Factory Class)**:用于创建DAO实例,可以是静态工厂方法,也可以是抽象工厂模式,提供统一的DAO对象创建入口。 **JDBC基础** JDBC是Java连接数据库的标准API,提供了与多种数据库交互的能力。在DAO...

    Chapter08DAO模式_javadao_

    - 使用DAO工厂模式创建DAO实例,以支持不同数据库的切换。 综上所述,Java DAO模式是企业级Java应用中处理数据库操作的标准方式。通过合理地设计和实现DAO,我们可以构建出健壮、可扩展的系统。在"Chapter08DAO...

    j2ee重构DAO&MVC等模式.ppt

    在实际应用中,可以使用工厂方法模式创建DAO,必要时还可以采用抽象工厂模式。通过属性文件和反射机制,可以动态地创建DAO类的实例,使得系统更具灵活性。 MVC(Model-View-Controller)模式是Web应用中常用的设计...

    J2EE之DAO设计模式

    ### J2EE之DAO设计模式详解 #### 一、引言 在J2EE开发过程中,DAO(Data ...此外,结合工厂模式的使用,还可以进一步增强系统的灵活性和解耦能力。在实际的J2EE项目开发中,合理地运用这些设计模式是非常重要的。

    java工厂方法模式

    同时,工厂方法模式也可以避免简单工厂模式的缺点,即当有新产品要加入到系统中时,必须对工厂类进行修改,以加入必要的处理逻辑。 工厂方法模式适合在如下场合中运用: * 当无法得知必须创建的对象属于哪个类的...

    第一行代码Java源代码第15章课程代码DAO设计模式

    7. **工厂模式**:为了进一步解耦,我们可能会引入工厂模式来创建DAO对象,这样可以更方便地替换不同的数据访问实现。 8. **依赖注入**:在实际项目中,DAO实例通常通过依赖注入的方式获取,比如使用Spring框架的@...

    Hibernate DAO生成器

    5. **使用生成的DAO**:在业务逻辑代码中,通过依赖注入或工厂模式等方式获取DAO实例,然后调用其提供的方法进行数据库操作。 **四、DAO生成器的特性** 1. **节省时间**:避免手动编写大量的DAO代码,减少重复劳动...

    动网代码自动生成器(codematic2)实体类、三层架构、工厂模式等

    使用codematic2时,开发者只需提供必要的配置信息,如数据库连接、表结构等,工具便会自动生成相应的实体类、业务接口及其实现、DAO接口及其实现、以及工厂类等代码。这样的自动化过程不仅节省了大量手动编码的时间...

    java设计模式&java程序设计

    2. **封装和隐藏实现细节:** 设计模式如工厂模式允许开发者隐藏对象创建的细节,只暴露必要的接口。 3. **减少耦合:** 数据访问对象模式有助于降低业务逻辑层与数据访问层之间的耦合度,使得两者可以独立发展。 4. *...

    javaweb简历.docx

    - **交友系统**:开发者实现了用户登录验证、用户列表展示、照片上传和交友功能,加深了对 Servlet、JSP 和数据库交互的理解,以及 DAO 和工厂模式的应用。 8. **教育背景和课程**: 开发者具有信息与计算科学...

    mybatis.doc

    2. Mapper代理开发:推荐使用,只需要编写DAO接口(即Mapper接口),以及对应的`mapper.xml`映射文件和`mapper.java`接口。 在编写`mapper.xml`时,有以下规则: - `namespace`应设置为`mapper.java`接口的全限定...

    java软件工程课程设计影院系统源码.zip

    11. **设计原则与模式**:遵循单一职责原则、开闭原则等,以及适配器模式、工厂模式等设计模式,可以使代码更加灵活和易于维护。 12. **文档编写**:良好的软件工程实践要求有清晰的文档,包括需求文档、设计文档和...

    java项目基础编程规范说明书

    提倡使用设计模式,如工厂模式、单例模式等,以提高代码复用和可扩展性。 4. **异常处理**:异常处理是Java编程中的关键部分。规范要求对可能出现的异常进行捕获并适当处理,避免使用空catch块。推荐使用具体的异常...

    银行ATM系统

    9. **设计模式**:除DAO外,可能还应用了其他设计模式,如工厂模式用于创建数据库连接,策略模式用于处理不同的交易类型,观察者模式用于实时更新用户界面等。 10. **单元测试**:为了确保系统的正确性,每个功能...

    SpringMvc-Mybatis代码

    5. **Service 层**:业务逻辑通常在 Service 类中实现,如 `UserService.java`,它们调用 DAO 来执行数据库操作,并进行必要的业务验证和处理。 6. **DAO 层**:数据访问对象,如 `UserDaoImpl.java`,实现了与 ...

    OA办公源码

    通过设计模式如工厂模式、单例模式等,可以使代码更易于理解和复用。 通过研究和学习这个"办公企业OA源码1",开发者不仅可以了解OA系统的实现原理,还能掌握相关技术的应用,为自己的项目开发积累宝贵经验。同时,...

    敏捷软件开发的必要技巧

    - **使用设计模式**:例如工厂模式、策略模式等,可以帮助减少代码冗余。 - **自动化工具**:利用代码审查工具、静态分析工具等辅助发现并移除重复代码。 **3. 示例解析** - 举例说明如何通过重构将重复代码转化...

    mybatis01_eg.zip

    - **Executor**:执行器,MyBatis内部处理SQL的组件,有两种模式:SimpleExecutor和ReusedExecutor,分别对应简单的每次执行都新建连接和复用已有连接的策略。 - **ParameterHandler**:负责设置SQL参数,可以是简单...

Global site tag (gtag.js) - Google Analytics