基于反射的基本通用DAO

Dal*_*ton 1 java reflection dao hibernate

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

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

DAO.forClass(MyClass.class, MyClassPK.class).genericDAOMethod();
Run Code Online (Sandbox Code Playgroud)

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

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

小智 5

反思几乎从未被视为问题的答案。它只是难以阅读,因为很多人不知道它是什么,而在您身后修改您的代码的人无法轻松理解它。使用 Code Complete 一书中的术语并不是“自我记录”。

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

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

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