Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.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 使用JDBCDAO支持扩展DAO,这是一种糟糕的做法吗?_Java_Spring_Jdbc - Fatal编程技术网

Java 使用JDBCDAO支持扩展DAO,这是一种糟糕的做法吗?

Java 使用JDBCDAO支持扩展DAO,这是一种糟糕的做法吗?,java,spring,jdbc,Java,Spring,Jdbc,我在网上和现实生活中看到了很多例子。人们在使用Spring框架时使用JDBCDAO支持扩展DAO。这在概念上是非常错误的,因为扩展或继承是一种关系。虽然我们的道是道,但它不是任何类型的道支持。通过使用JDBCDaoSupport对其进行扩展,我们使其成为JDBCDaoSupport。如果有人想使用JDBCDaoSupport,他应该通过组合而不是继承来使用它。我说的对吗?你确定你指的不是Spring的吗 从: 方便的超类,用于基于JDBC的数据访问对象。需要一个 要设置的数据源,提供基于它的Jd

我在网上和现实生活中看到了很多例子。人们在使用Spring框架时使用JDBCDAO支持扩展DAO。这在概念上是非常错误的,因为扩展或继承是一种关系。虽然我们的道是道,但它不是任何类型的道支持。通过使用JDBCDaoSupport对其进行扩展,我们使其成为JDBCDaoSupport。如果有人想使用JDBCDaoSupport,他应该通过组合而不是继承来使用它。我说的对吗?

你确定你指的不是Spring的吗

从:

方便的超类,用于基于JDBC的数据访问对象。需要一个 要设置的数据源,提供基于它的JdbcTemplate 通过getJdbcTemplate方法创建子类

在实现决策方面,为什么JdbcDaoSupport在内部使用继承而不是组合,这是因为DaoSupport是一个抽象类。这是教科书式的继承,因为DaoSupport作为一个骨架支持实现,由Jdbc/Hibernate/DaoSupport类子类化

关于为什么我们要从JdbcDaoSupport扩展DAO,而不是使用组合,这样我们就可以直接获得getJdbcTemplate或getDataSource,而不必创建自己的基础设施来公开它们。在这种情况下,我们不需要Spring提供这样的支持类,因为我们的Dao实现在某种意义上完成了所有的工作。spring提供的这些*DaoSupport类是我们DAO的一个非常薄的支持层


我会以批判性的态度对待“组合或继承”的选择,因为在一些合理的情况下,每种方法都最适合

你的短语:我在网上和现实生活中看到了很多例子。人们在使用Spring框架时使用JDBCDaoSupport扩展DAO,这并不表明您意识到JDBCDaoSupport是Spring库的一部分。假设您确实意识到了这一点,那么您的问题是关于为什么JdbcDaoSupport使用继承而不是组合的架构决策。如果你看一下代码,JdbcDaoSupport正在扩展DaoSupport,这是一个抽象的类。我已经在我的答案中添加了关于为什么选择它作为实现决策亲爱的,我不是在问为什么JdbcDaoSupport在扩展DaoSupport。我在问为什么开发人员要用Dao支持扩展他们的Dao?要么是JDBCDaoSupport,要么是HibernateDaoSupport。这样他们就可以直接调用getJdbcTemplate或getDataSource,而不是让自己的基础设施在组合时公开它们!如果它打算与组合一起使用,那么这个支持类就没有任何用途,因为我们所有的Dao实现本质上都服务于相同的用途