java - 基于反射的基本通用 DAO

标签 java hibernate reflection dao

嗯,我的项目中有一些问题困扰着我。我有很多很多 Hibernate 实体类,每个类都有自己的 DAO(继承自 GenericDAO)。它们大多数没有具体的功能,只是一个继承GenericDAO的空类。

由于我认为这些是不必要的类,因此我决定使用反射来删除它们。 经过一些编码后,我对除 GenericDAO 之外没有特定方法的所有类的调用都遵循以下设计:

DAO.forClass(MyClass.class, MyClassPK.class).genericDAOMethod();

它就像一个魅力。我现在摆脱了空的 DAO。但在网上搜索后,我发现像我这样的解决方案很少甚至没有,所以问题是:

这种方法在很大程度上是错误的还是糟糕的?为什么没有人考虑做这样的事情?

最佳答案

反射(reflection)几乎从来不被认为是问题的答案。它很难阅读,因为很多人不知道它是什么,并且在你后面修改代码的人也无法轻松理解它。使用《Code Complete》一书中的术语并不是“ self 记录”。

反射非常强大,因为您刚刚发现它是为了实现 DAO。但你应该厌倦它。我们在办公室使用的一个术语是“代码臭味”,它是可能出于特定目的而存在的代码,但除非绝对需要,否则不应在任何地方使用。确保正确记录,以便真正支持您的人知道这到底是什么。

我喜欢用它在 Spring 中编写 jUnit 测试,以使用反射来比较来自两个不同数据库的两个对象。但这只是一个测试,实际上并不在生产代码中。

希望这对您有所帮助,并且正是您所寻找的!

关于java - 基于反射的基本通用 DAO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26682356/

相关文章:

java - org.apache.tomcat.jdbc.pool 中的验证查询

java - 如何计算 ScheduledExecutorService 的初始延迟#scheduleAtFixedRate

java - 如何仅在 mvc 层排除验证属性(并保留数据库层)?

java - 为什么 java.lang.reflect.WildcardType 类返回上限和下限的数组?

java - 如何使用 Java 反射访问私有(private)数组?

java - getDeclaredConstructor 方法的参数

java - 使用了扫描仪方法,但键盘输入未显示在命令窗口中

java - List Iterator 一个元素的下一个元素

java - 映射实体,列表作为映射值。通过 JDBC 语句执行 DDL "drop table if exists ` single_line`"时出错

java - 如何在日期之间搜索(Hibernate Search)?