【问题标题】:How to implement Identity Map with Class Table Inheritance?如何使用类表继承实现身份映射?
【发布时间】:2012-05-30 19:07:30
【问题描述】:

我正在用 PHP 编写一个数据映射器,并试图弄清楚当我的域对象遵循类表继承时如何实现标识映射。

在我看来,问题在于身份映射不能保证数据在内存模型中只显示一次,因为分层对象依赖于分层数据。

例如,在我的数据库中,我有一个父表和一个子表。在我的域模型中,我有一个 Parent 类,并从它扩展了一个 Child 类。我可以同时实例化父对象和子对象,并将它们的身份记录在身份映射中,没有问题。如果客户端代码请求相同的 Parent 或 Child,我可以从我的缓存中返回它,而不是从数据库中返回,没有问题。

但是如果 Parent 和 Child 都与同一个父记录相关,会发生什么?即父表中的相同数据?我现在在内存中将该数据表示了两次,如果它在一个(或两个实例)中被修改,我可能会覆盖更改。

在我看来,身份映射需要遵循类似于域对象和映射器本身的层次结构,但是在这一点上它变得有点复杂。另外,我还有很多依赖映射需要考虑。

非常感谢任何想法/建议!

【问题讨论】:

    标签: php design-patterns datamapper


    【解决方案1】:

    如果你发现你有很多重复/重复的数据,那么设计是错误的......

    即如果你的父母说了一个孩子共享的地址,你应该有一个地址表,并且这些记录中的每一个都将指向地址表中的单个条目等。

    那么在你的应用程序中有相关规则的情况,即如果儿童帐户中的地址发生变化......你会怎么做?更新(这意味着父母也将有新地址)或插入一个新地址。

    【讨论】:

      【解决方案2】:

      我定义了一个接口,iQueueable,并且只有实现这个接口的对象才可以排队,以便将它们的更改写入数据库。

      子对象具有完整的对象属性,因此它们实现了 iQueueable。父对象不能排队。

      这仍然允许父子对象不同步,但现在只有一个数据库更改源。

      【讨论】:

        猜你喜欢
        • 2018-02-04
        • 2012-03-04
        • 1970-01-01
        • 2021-11-22
        • 2011-07-25
        • 2015-08-02
        • 1970-01-01
        • 2012-11-16
        • 1970-01-01
        相关资源
        最近更新 更多