【问题标题】:Persistent and transient objects - confused about terminology持久和瞬态对象 - 对术语感到困惑
【发布时间】:2012-07-12 14:19:23
【问题描述】:

这是我对这两个术语的定义,虽然我不确定它是否完整:

一个持久对象是领域模型中的一个类的实例 表示从数据库中提取的一些信息。一种 transient object是领域模型中类的一个实例,在内存中创建

a) 我假设术语 persistenttransient 仅用于域模型中的对象,但不适用于位于域模型之外的业务层中的对象?

b) 我们是否也对 Data-Transfer-Objects 使用这两个术语?

c) 这两个术语是否也用于值对象

谢谢

【问题讨论】:

    标签: domain-driven-design persistence transient


    【解决方案1】:

    持久表示对象已保存到数据库中,而瞬变表示尚未保存。因此,例如,当您从存储库中获取实体时,该实体是持久的。当您创建一个新实体时,它是暂时的,直到持久化。

    a) 这些术语与 ORM 的关联性比与 DDD 的关联性更高,因此它们适用于任何非 DDD。在 DDD 中持久化/瞬态适用于实体和聚合根,因为这些是与存储库一起持久化的对象。

    b) 不,DTO 旨在跨进程边界传输数据,并且没有您希望持久保存到数据库的对象所具有的生命周期。

    c) 否,因为值对象没有标识,只能作为实体或聚合根的一部分持久化。值对象只是一个值,就像 1 是一个整数值一样,谈论它是否持久化是没有意义的。

    【讨论】:

    • 你回答了我的问题,所以我会在一天内将其标记为已回答。但是,如果您找到一些时间来帮助我更多:“不,因为值对象没有身份,只能作为实体或聚合根的一部分持久化。”我们不使用这两个术语来表示值对象即使它有自己的数据库表?
    • ORM 根据其标识符(或版本)的值确定对象的持久/临时状态。鉴于值对象没有 ID,ORM 不会对值对象做出决定——所有值对象都通过根实体持久化。如果你直接持久化值对象,那么它们就不是真正的值对象。
    【解决方案2】:

    Transient 表示未处理的对象或实例化或新创建的对象。一旦对象被提交以进行除对象状态之外的任何其他操作,则该对象状态是已知的持久性

    【讨论】:

      【解决方案3】:

      一个对象通常有两个组成部分:状态(值)和行为(操作)。它可以有复杂的数据结构以及程序员定义的特定操作。9 OOPL 中的对象只存在于程序执行期间;因此,它们被称为瞬态对象。 OO 数据库可以扩展对象的存在,以便将它们永久存储在数据库中,因此对象成为在程序终止之后存在的持久对象,并且可以稍后检索并由其他程序共享。换句话说,OO 数据库将持久对象永久存储在二级存储中,并允许在多个程序和应用程序之间共享这些对象。

      【讨论】:

        猜你喜欢
        • 2012-10-02
        • 1970-01-01
        • 1970-01-01
        • 2014-02-23
        • 2018-11-13
        • 2011-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多