首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DAO包结构

DAO包结构
EN

Stack Overflow用户
提问于 2012-04-03 01:54:41
回答 5查看 14.7K关注 0票数 10

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

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

示例:

代码语言:javascript
复制
com.mycompany.myproject.dao.MyDao
com.mycompany.myproject.dao.MyDaoImpl

代码语言:javascript
复制
com.mycompany.myproject.dao.MyDao
com.mycompany.myproject.dao.impl.MyDaoImpl

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

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-04-03 02:09:43

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

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

如果你打算使用同一DAO的多个实现,那么将它们构建在.jdbc.jpa.jdo子包中将是有意义的。如果只有一个实现,那么列举的两个选项在某种程度上都是有意义的(相同的包或.impl子包)。

关于过度工程,我推荐你这个article。尽管你的DAO只有一个实现,但将它们定义为接口和实现是有意义的,因为这将有助于你在潜在的未来为其他框架重写DAO,同时使用它们的代码保持不变。

最后,这取决于你(或你和你的同事)达成共识,并做出在你的特定情况下更有意义的决定。

编辑

应用程序通常每个DAO接口都有一个实现,这根本不是过度设计,让相同的DAO接口为JPA和JDO实现是没有意义的。使用接口/实现模式的一些目的是简化重构、通过模拟对象进行测试等。

附言:我通常依靠JDepend在包中分发我的应用程序类,尽可能避免周期。

票数 6
EN

Stack Overflow用户

发布于 2012-04-03 02:02:24

我认为两者都不是更好,但在这种情况下,我更喜欢第一种选择。它与将ArrayListLinkedList等放在与List相同的包中是一致的。

在使用其他框架时,比如hibernate,我更喜欢使用MyDaoHibernateDao作为实现者的第二种选择。

票数 3
EN

Stack Overflow用户

发布于 2012-04-03 02:26:08

我会选择你的第二个选项(虽然没有一个更好),因为你可以在导入中立即看到impl是否被导入,如果你想将impl移到另一个项目中,重构会更简单。

这并不是过度的工程。使用DAO有多个优点:

  1. 它通过将数据库访问与其他considerations
  2. Testing解耦来提高代码质量您的代码将变得更容易,并且您可以更细粒度地对其进行测试。
  3. 如果有一天,您发现Hibernate对您来说要容易得多,它不会影响您其余的代码。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9981277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档