通用DAO的缺点?

时间:2012-12-25 14:36:49

标签: java design-patterns dao

我想为我的应用程序创建一个DAO层。经过一些谷歌搜索后,我发现许多人使用通用DAO方法(Don't repeat the DAO!)。

但我不喜欢这种方法。

如果我在DAO之间需要稍微不同的接口以用于不同的DAO实现,该怎么办? (即通用接口中的方法与我想在DAO实现中创建的方法不完全相同)

如果我的实体的主键由多个属性组成,该怎么办?

5 个答案:

答案 0 :(得分:4)

如果您需要为特定实体稍微不同的DAO,您可以随时扩展通用的(MySpecificDAO <....> extends GenericDAO<....>)。主键本身可以是复合的,但是不可能有2个主键。

答案 1 :(得分:2)

直接来自您链接的文章:

  

扩展GenericDAO

     

每个DAO的接口当然都基于GenericDao接口。我只需要将接口调整到特定的域类并扩展它以包含我的finder方法。在清单6中,您可以看到为特定目的扩展的GenericDao接口的示例

关于你的上一个问题:根据定义,一个实体只有一个主键。

答案 2 :(得分:2)

缺点:你仍然需要实现DAO。停止遵循6年前的建议,改为使用Spring Data repositories。那么你根本不需要编写任何实现。

答案 3 :(得分:1)

  

如果我需要DAO之间略有不同的接口,那么该怎么办?   DAO实现?

您可以覆盖GenericDaoImpl课程中的方法。或创建一种新方法。

  

如果我的实体有2个或更多主键怎么办?

我猜你的意思是复合键情节。请注意,GenericDao中的findOne / readOne / getOne方法通常需要一个参数,(T key)这里的T是类型,它可以是复合主键。

例如:

class PersonPK{
 private String name;
 private Date birthday;
.....
}

答案 4 :(得分:0)

您可以找到here a Generic DAO该文章的有效和改进的实现。只需查看页面底部的Example.java即可。在这个例子中,您可以看到如何定义“不同DAO的DAO之间略有不同的接口” 实现方式”。