DAO的职责应该走多远?

时间:2012-08-21 08:00:33

标签: design-patterns persistence dao

DAO,也称为mapper(我认为),是Core Java EE pattern

我喜欢这种模式,因为(IMO)在代码和SQL之间创建一个抽象层会增加很多代码的质量。

我通常遵循Java EE模式,但是当你需要来自数据库的一些非常具体的数据时,我感到有些迷失。我不确定谁应该负责检索这些数据。

我的方法通常是创建一个UserModel类,在其中存储最常用的参数,在DAO中我创建一个方法getUser(param: String): UserModel。但是,如果数据库中有一列当然需要,但不是经常这样。什么是最好的方法?

你认为DAO应该提供像(例如)getUserID(): StringisUserVerfied(): Boolean这样的方法吗?或者你认为DAO的责任只是提供基础知识(更新/删除/插入/选择)?

基本上,问题是,当你需要一些在你的代码中没有大量使用的数据时,最好的方法是什么,在你的DAO中创建一个select()方法来加载所有(用户表的)(例如))在你的模型中。或者有一些特定的方法,如isUserVerified(): Boolean,尽管这不是模式的一部分?或者还有另一种方法适用于这两种情况(通常使用字段而不是经常使用的字段)?

请注意,答案应尽可能与语言无关。

1 个答案:

答案 0 :(得分:1)

DAO的目的是为完整对象提供水分,在大多数情况下,始终加载所有对象的字段应该不是问题。在没有遇到性能问题时,不加载“未经常使用”的列似乎是过早优化。

当处理非常大的列(图像,BLOB ......)时,您可以通过ORM或手动使用延迟加载。加载列的方法可以在DAO中,也可以在特定服务中。