Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.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_Java_Hibernate_Reflection_Dao - Fatal编程技术网

Java 基于反射的基本泛型DAO

Java 基于反射的基本泛型DAO,java,hibernate,reflection,dao,Java,Hibernate,Reflection,Dao,嗯,在我的项目中有些东西困扰着我。我有很多很多hibernate实体类,每个类都有自己的DAO继承自GenericDAO。它们大多数没有特定的功能,只是一个继承GenericDAO的空类 因为我认为这些是不必要的类,所以我决定使用反射来摆脱它们。 经过一些编码后,我对除GenericDAO之外没有特定方法的所有类的调用遵循以下设计: DAO.forClass(MyClass.class, MyClassPK.class).genericDAOMethod(); 它就像一个符咒。我现在摆脱了空D

嗯,在我的项目中有些东西困扰着我。我有很多很多hibernate实体类,每个类都有自己的DAO继承自GenericDAO。它们大多数没有特定的功能,只是一个继承GenericDAO的空类

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

DAO.forClass(MyClass.class, MyClassPK.class).genericDAOMethod();
它就像一个符咒。我现在摆脱了空DAO。但通过互联网搜索后,我发现几乎没有像我这样的解决方案,所以问题是:


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

< P>反射几乎从来都不被认为是一个问题的答案。这很难理解,因为很多人都不知道它是什么,而在你后面修改代码的人也不容易理解它。使用《代码完成》一书中的术语并不是自我记录

反射是强大的,正如您刚刚发现的那样,它是为了实现一个DAO。但你应该对此感到厌倦。我们在办公室里使用的一个术语是代码臭味,这是一种可能有特定用途的代码,但除非绝对需要,否则不应该在任何地方使用。确保正确记录,以便真正落后于你的人知道这到底是什么

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


希望这对你有所帮助,这正是你想要的

反思几乎从未被认为是问题的答案。这很难理解,因为很多人都不知道它是什么,而在你后面修改代码的人也不容易理解它。使用《代码完成》一书中的术语并不是自我记录

反射是强大的,正如您刚刚发现的那样,它是为了实现一个DAO。但你应该对此感到厌倦。我们在办公室里使用的一个术语是代码臭味,这是一种可能有特定用途的代码,但除非绝对需要,否则不应该在任何地方使用。确保正确记录,以便真正落后于你的人知道这到底是什么

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


希望这对你有所帮助,这正是你想要的

不是说你会有两种不同的方法来处理有自己方法的类和没有自己方法的类。谢谢你的回答!正如我所说,这个类只解决了为了继承而实现空DAO的问题。在所有其他情况下,我的设计都是垃圾。我把它记录在课堂上了。。。不管怎样,你对思考问题解决的看法是好的。。。我将选择其他视图,并尝试使用良好的文档对其进行细化。@Dmytro由于对象类型相同,数据库中的表基本相同,因此您可以使用反射来比较表中的信息。这是完全相同的信息,相同数量的字段和所有内容。正因为如此,反射在这里可能很有用。@Dmytro,在我的例子中,这个类很有用,我有很多操作系统空DAO和与业务相关的DAO。@Dalton代码有几个方面。一个是纯编程。另一个是发展。从编程的角度来看,这是可以的。但考虑到开发,例如未来的变化,其他开发人员的参与等等,这是不好的。希望这能让我的观点更清楚。不要说你会有两种不同的方法来处理有自己方法的类和没有自己方法的类。谢谢你的回答!正如我所说,这个类只解决了为了继承而实现空DAO的问题。在所有其他情况下,我的设计都是垃圾。我把它记录在课堂上了。。。不管怎样,你对思考问题解决的看法是好的。。。我将选择其他视图,并尝试使用良好的文档对其进行细化。@Dmytro由于对象类型相同,数据库中的表基本相同,因此您可以使用反射来比较表中的信息。这是完全相同的信息,相同数量的字段和所有内容。正因为如此,反射在这里可能很有用。@Dmytro,在我的例子中,这个类很有用,我有很多操作系统空DAO和与业务相关的DAO。@Dalton代码有几个方面。一个是纯编程。另一个是发展。从编程的角度来看,这是可以的。但考虑到开发,例如未来的变化,其他开发人员的参与等等,这是不好的。希望这能让我的观点更清楚。你能说明这是如何使用反射的吗?仅仅拥有一个类的引用并不足以调用这个refle
我想是的。我认为您可以在调用端使用GenericDao,并在依赖项注入系统中生成这些DAO(假设您有一个)。我的GenericDao使用Hibernate,所以我只需要实例化一个新的GenericDao来传递MyClass和MyClassPK。我在这种DAO中不使用CDI。换句话说,GenericDAO类声明是这样的:公共类GenericDAO。您能说明如何使用反射吗?我认为,仅仅引用一个类并不足以称之为这种反射。我认为您可以在调用端使用GenericDao,并在依赖项注入系统中生成这些DAO(假设您有一个)。我的GenericDao使用Hibernate,所以我只需要实例化一个新的GenericDao来传递MyClass和MyClassPK。我在这种DAO中不使用CDI。换句话说,GenericDAO类声明是这样的:公共类GenericDAO。