持久性实体作为数据传输对象

时间:2010-10-03 13:46:02

标签: java persistence dto

我的Web应用程序中包含所有@annotations的一些具有持久性能力的Java对象。所有这些对象都驻留在数据层中。将这些持久性对象用作数据传输对象是最佳做法吗?

例如,如果我想传回从数据存储中获取的数据,我是应该直接返回这些持久性对象还是应该手动将数据复制到中间DTO并将其传递回其他层?你会建议采用哪种方法?

3 个答案:

答案 0 :(得分:1)

如果您绝对确定没有副本会在会话存储中结束,或者将被持久化/迁移到另一个实例/其他任何实例,则无需执行此操作。

如果您需要将这些对象保留在多个会话/请求中,那么它是有意义的。

另一个用例是当你需要非常彻底地解耦loginc和持久层时(即交换不同的持久层),那么通过注释的耦合可能很麻烦。

答案 1 :(得分:1)

我想说这样做是可以的(事实上,如果您遵循以下准则,这些ORM的主要优点是在不同的层中使用这些域对象而没有不必要的DTO):

  1. 您不扩展会话边界,即,应始终使用您定义的数据访问层而不是通过其他层中的这些传递对象来完成与数据库相关的任何更改。
  2. 在其他层(数据访问层上方的层,如业务逻辑层和表示层)中需要的任何数据都预先填充在这些对象中,否则您将根据ORM行为获得异常。
  3. 不要延长会话边界以解决第2号中提到的问题

答案 2 :(得分:0)

我从未需要通过将持久性实例复制到不同的DTO类来提供额外的抽象级别。