我们有一个典型的 n 层 java 应用程序,我注意到我们的数据访问层具有 FooDAO 和 FooDAOImpl 类型的 DAO。我正在寻找证明两者的必要性,这是我的分析。
- 如果您对同一个接口有多个实现,那么抽象是有帮助的。但是鉴于我们已经选择了用于 DAOImpl 的框架(比如 iBATIS),它真的需要吗?
- 帮助通过 Spring 进行代理。据我所知,具有接口的类可以很容易地代理(使用 JdkProxy 路由),而不是没有接口的类(选择 cglib 路由),并且一个类具有要代理的类的子类。子类化有它的问题,即要代理的类是最终的或没有默认构造函数——这两种情况在数据访问层都是极不可能的。性能曾经是一个因素,但据我所知,它不再是一个令人担忧的问题。
- 帮助嘲讽。具有接口的类更适合被模拟框架模拟。我只听说过这个,但在实践中没有看到 - 所以不能真正指望它,但可能是因为与上面#2中提到的相同因素。
有了这些观点,我觉得不需要单独的 FooDAO 和 FooDAOImpl 一个简单的 FooDAO 就足够了。随时纠正我提到的任何观点。
提前致谢!