Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多DAO';s vs一个带有配置文件的DAO_Java_Database_Dao - Fatal编程技术网

Java 多DAO';s vs一个带有配置文件的DAO

Java 多DAO';s vs一个带有配置文件的DAO,java,database,dao,Java,Database,Dao,我目前正在为应用程序创建数据访问层。该应用程序最初将连接到Oracle数据库,但稍后也将连接到DB2数据库 为了连接到数据库,我将使用JDBC。现在我正在考虑我的选择。在我看来,我有两个(主要)选择 1) 创建一个支持多个DAO工厂的设计,每个工厂实例化特定于其数据库的DAO。最初,这种设计将只有一个工厂。稍后将使用第二个工厂和DAO类对其进行扩展 2) 创建一个DAO工厂,为不同的模型实例化多个DAO。这个DAO工厂基于配置文件构建DAO,配置文件包含JDBC驱动程序路径和连接url 我很想选

我目前正在为应用程序创建数据访问层。该应用程序最初将连接到Oracle数据库,但稍后也将连接到DB2数据库

为了连接到数据库,我将使用JDBC。现在我正在考虑我的选择。在我看来,我有两个(主要)选择

1) 创建一个支持多个DAO工厂的设计,每个工厂实例化特定于其数据库的DAO。最初,这种设计将只有一个工厂。稍后将使用第二个工厂和DAO类对其进行扩展

2) 创建一个DAO工厂,为不同的模型实例化多个DAO。这个DAO工厂基于配置文件构建DAO,配置文件包含JDBC驱动程序路径和连接url

我很想选择第二个选项,它似乎消除了DAO中相当多的代码重复。有人能给出这两种方法的利弊吗


当您在使用JDBC时并不真正需要多个DAO工厂(抽象工厂模式)时,为什么要选择它?

我认为or是您最好、最干净的选择,您希望选择适当的DAO实现并将其注入DAO消费者层。Spring还将使您能够使用SpringJDBC,它负责大多数样板代码,使DAO易于管理和编码。您也可以将ORMs与Spring一起使用。

考虑到您不能使用Spring(即使它可以节省大量编码),我想说第二个变体更适合您,因为您将自己实现依赖关系管理,并且1个依赖关系(单DAO工厂)总是比2个更容易

不过,如果您认为两个数据库同时使用的DAO位置数量不大,那么将它们分成两个工厂将具有更好的结构意义,而且更干净。但是,如果您预期,几乎每个使用DAOs的类都需要两个世界(Oracle+DB2),那么请再次使用第二个变体


无论如何,试着再考虑DeNeDeCy注入框架的用法,因为不管怎样,你要用所有的工厂来实现你自己。

你是否考虑过使用Spring和Hibernate?是的,决定(外部)不使用Spring或ORM解决方案。这件事留给我自己去做,你只需要使用SpringDI部分,而不需要通过SpringJDBC或ORM。您可以选择您想在Spring中使用的内容—它是一个包含许多模块的非常丰富的框架。我宁愿让决策者了解编写干净的模块化代码的好处,而不是编写一个自主开发的配置解析和DI系统。这确实会让我的工作变得容易得多。不幸的是,我不允许在没有经过几层管理的情况下使用其他库。我现在不想那样做。谢谢你对Guice的建议,我还不知道,听起来很棒。