好吧,我的项目有些困扰我。我有很多休眠实体类,并且它们每个都有自己的DAO(从GenericDAO继承)。它们大多数没有特定的功能,只是一个继承GenericDAO的空类。
由于我认为这些是不必要的类,因此我决定使用反射将其消除。
经过一些编码后,我对除GenericDAO之外没有特定方法的所有这些类的调用均遵循以下设计:
DAO.forClass(MyClass.class, MyClassPK.class).genericDAOMethod();
它像一种魅力。我现在摆脱了空的DAO。但是在通过互联网搜索之后,我发现像我这样的解决方案很少到没有,所以问题是:
这种方法在任何方面都是错误的还是错误的?为什么没有人考虑做这样的事情?
最佳答案
反思几乎从来没有被认为是解决问题的答案。它很难阅读,因为很多人不知道它是什么,而后面您来修改代码的人也不容易理解它。使用“代码完成”一书中的术语不是“自我记录”。
反射是强大的,正如您刚刚发现要实现DAO一样。但是您应该对此感到厌倦。我们在办公室周围使用的一个术语是“代码臭味”,该代码可能出于特定目的而存在,但是除非绝对需要,否则不应在各处使用。确保正确记录文档,以使真正落后于您的人知道这到底是什么。
我喜欢用它在Spring中编写jUnit测试,以使用反射比较来自两个不同数据库的两个对象。但这是一个测试,并且实际上不在生产代码中。
希望这会有所帮助,这就是您要寻找的!
关于java - 基于反射的基本通用DAO,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26682356/