基于反射的基本通用DAO

时间:2014-10-31 19:47:53

标签: java hibernate reflection dao

嗯,我的项目中有些东西让我烦恼。我有很多很多的hibernate实体类,每个类都有自己的DAO(继承自GenericDAO)。他们中的大多数没有特定的功能,只是一个继承GenericDAO的空类。

由于我认为那些是不必要的课程,我决定用反射来摆脱它们。 经过一些编码后,除了GenericDAO之外,我对所有没有特定方法的类的调用都遵循这个设计:

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

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

这种方法在任何相当大的方面都是错误的还是坏的?为什么没有人考虑做过这样的事情?

1 个答案:

答案 0 :(得分:4)

反思几乎从未被视为问题的答案。它很难阅读,因为很多人不知道它是什么,而你后面修改代码的人无法轻易理解。它不是“自我记录”来使用“代码完成”一书中的术语。

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

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

希望这会有所帮助,并且是您正在寻找的东西!