DAO包结构

dha*_*im2 10 java dao

我正在使用JDBC(没有Spring,Hibernate或其他任何东西)在Java中编写一些简单的DAO.

将实现DAO放在与其接口相同的包中还是将它们放在子包中更好?

例:

com.mycompany.myproject.dao.MyDao
com.mycompany.myproject.dao.MyDaoImpl
Run Code Online (Sandbox Code Playgroud)

要么

com.mycompany.myproject.dao.MyDao
com.mycompany.myproject.dao.impl.MyDaoImpl
Run Code Online (Sandbox Code Playgroud)

如果你建议子包结构,你会建议什么作为子包名?.impl?.SQL?.jdbc?

实际上,我不会有多个实现.我是否过度设计了这个?

Alo*_*uez 5

在设计应用程序时,在包中没有标准的结构化方法,经验通常可以帮助每个人确定我们的包的适当名称.

关于在同一个包或不同的包中打包接口的实现,只需考虑Java本身的结构:通常一个实现类打包在与其接口相同的包中,但并非总是如此.

如果你即将拥有的相同的DAO的几种实现那就让它们在结构意义.jdbc,.jpa.jdo子包.如果你只有一个实现,你枚举的两个选项都有某种意义(相同的包或.impl子包).

关于过度工程,我会推荐你​​这篇文章.即使您只有一个DAO的实现,将它们定义为接口和实现也是有意义的,因为这将有助于您在将来使用的代码重写其他框架的DAO.他们保持不变.

最后,由您(或您和您的同事)达成共识并做出在您的具体情况下更有意义的决策.

编辑

应用程序通常每个DAO接口都有一个实现,并且根本不会过度工程,为JPA和JDO实现相同的DAO接口是没有意义的.使用接口/实现模式的一些目的是为了简化重新分解,通过模拟对象进行测试等.

PS:我通常依赖JDepend来分发我的应用程序类,尽可能避免循环.