DAO模式中的TransferObject

时间:2015-01-14 09:52:19

标签: java dao

关于DAO模式的the official documentation表示该模式中有四个主要参与者。

BusinessObject
DataAccessObject
DataSource
TransferObject

还有说:

  

BusinessObject表示数据客户端。它的目标是   需要访问数据源以获取和存储数据。一个   BusinessObject可以实现为会话bean,实体bean或   一些其他Java对象,除了servlet或helper bean之外   访问数据源。

我的问题是为什么我们不能将Entity bean用作Transfer Object?我认为它完全适合这个定义。

基本上,实体bean可以用作BusinessObjectTransferObject,可以吗?

例如,一个实体:

@Entity
@Table(name="tbl")
public class User{
    //Fields, Getters, Setters
}

怎么了?

2 个答案:

答案 0 :(得分:2)

实体受限于JPA会话,并且在会话关闭时(例如,当它被发送到另一个服务器时)将无法正常工作 - 例如,访问延迟集合将引发异常

答案 1 :(得分:1)

是的,在现代技术堆栈中,这已经完成。您可以对业务对象和传输对象使用相同的POJO。但这种方法存在局限性。

  1. 无法排除或包含某些字段(您可能希望存储密码,但在转移到前端时将其隐藏)
  2. 对于不同的场景可能需要不同的字段(对于创建,可以有一个传输对象,对于更新,可以有另一个)。
  3. 由于这些原因,建议使用两组POJO。