需要单独的接口和DAI的impl

Kil*_*ahn 8 java spring dao mocking

我们有一个典型的n层java应用程序,我注意到我们的数据访问层有DAO类型为FooDAO和FooDAOImpl.我想要证明两者的必要性,这是我的分析.

  1. 如果您对同一个接口有多个实现,那么抽象是有帮助的.但鉴于我们已经选择了用于DAOImpl的框架(比如说iBATIS),它真的需要吗?
  2. 通过Spring帮助代理.从我收集的内容来看,具有接口的类可以很容易地代理(进入JdkProxy路由)而不是没有接口的类(选择cglib路由的地方),并且一个类具有要代理的类的子类.子类化的问题在于代理类是final或者没有默认构造函数 - 这两者在数据访问层都不太可能.性能曾经是一个因素,但从我听到的,它不再是一个令人担忧的原因.
  3. 帮助嘲笑.具有接口的类更适合由模拟框架模拟.我只听说过这个,但在实践中没有看到它 - 所以不能指望它,但也许是因为与上面#2中提到的相同的因素.

有了这些观点,我觉得真正需要一个单独的FooDAO和FooDAOImpl,其中一个简单的FooDAO就足够了.随意纠正我提到的任何要点.

提前致谢!

Kil*_*ahn 2

我用 Mockito 尝试了#3,它能够在没有接口的情况下模拟 POJO。考虑到反对 #1 和 #2 的论点,我现在倾向于不选择单独的 DAO 和 DAOImpl。请随意添加其他比较点。