如何使用类表继承实现标识映射


How to implement Identity Map with Class Table Inheritance?

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

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

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

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

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

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

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

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

然后,您的应用程序具有相关规则的情况,即如果儿童帐户中的地址被更改......你是做什么工作的?更新(这意味着父地址也将有新地址)或插入新地址。

我定义了一个接口,iQueueable,只有实现此接口的对象才能排队以将其更改写入数据库。

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

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