2

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

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

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

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

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

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

4

2 回答 2

0

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

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

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

于 2012-05-24T08:17:12.810 回答
0

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

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

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

于 2012-07-03T01:51:05.467 回答