【问题标题】:Persistence entities as data transfer objects持久化实体作为数据传输对象
【发布时间】:2010-10-03 13:46:01
【问题描述】:

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

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

【问题讨论】:

    标签: java persistence dto


    【解决方案1】:

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

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

    【讨论】:

    • +1 说得好。这正是我们在产品中使用它们的方式。
    【解决方案2】:

    如果您绝对确定没有副本最终会在 Session 存储中或将被持久化/迁移到另一个实例/无论如何,则无需这样做。

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2020-09-09
        • 1970-01-01
        • 1970-01-01
        • 2019-03-02
        • 1970-01-01
        • 2014-04-07
        • 1970-01-01
        • 1970-01-01
        • 2012-01-30
        相关资源
        最近更新 更多