更新多个实体的方法通常不是DAO的一部分吗?

时间:2009-05-28 20:53:01

标签: design-patterns dao oop

我已经看过一百万个DAO示例,并且大多数情况下它们都为单个实体实现了基本的CRUD操作,可能有一些返回列表的方法(例如List getCustomers())。

但是,我从未见过一个示例,其中有一个方法可以更新,删除或创建多个实体,例如:void update(List)。

更新多个实体的方法通常不是DAO的一部分,还是在示例中不经常使用?我有一个要求,我必须进行一些批量插入,并且调用myDAO.create()一百次并不是非常有效。

我只是想确保在我继续前行并做一些看似显而易见的事情之前我没有遗漏任何东西。

3 个答案:

答案 0 :(得分:2)

我发现批量更新通常使用数据库供应商提供的工具完成。

我同意我见过的DAO通常没有创建/更新/删除重载的方法来获取List,但是他们没有理由不这样做。

让我觉得简短的一个想法是DAO在我写这些东西时不会拥有交易。他们永远无法知道他们在哪个工作单元中占有一席之地。这就是服务的作用。

我的建议是让DAO单独使用,让一个单独的服务层拥有批处理操作。服务拥有事务逻辑。它也是一个包含逻辑的好地方,可以将大量更新“分块”。这使您可以检查批处理并保持回滚日志的大小可管理。

答案 1 :(得分:0)

我认为这些例子不经常使用它。我的DAO拥有访问,创建和更新单个实体和记录集合的方法。

答案 2 :(得分:0)

void update(List)的行为应与void update(Item)相同,只有List会更新多个项目。如果没有,应该是除非有非常具体的理由,为什么不这样做。如果他们做同样的事情,调用方法的开销不是问题。

例如,调用update(Item) 1000次与调用update(List) 1相比,它与update(Item)相同,只有1000次意味着性能差异很小。

相关问题