我正在用 PHP 编写数据映射器,并试图弄清楚当我的域对象遵循类表继承时如何实现标识映射。
正如我所看到的,问题在于身份映射不能保证数据在内存模型中只显示一次,因为分层对象依赖于分层数据。
例如,在我的数据库中,我有一个 Parent 表和一个 Child 表。在我的域模型中,我有一个 Parent 类,并从它扩展了一个 Child 类。我可以同时实例化父对象和子对象,并将它们的身份记录在身份映射中,没有问题。如果客户端代码请求相同的父或子,我可以从我的缓存中返回它,而不是从数据库中返回,没有问题。
但是,如果 Parent 和 Child 都与同一个父记录相关,会发生什么?即父表中的相同数据?我现在有两次在内存中表示该数据,如果它在一个(或两个实例)中被修改,我可能会覆盖更改。
在我看来,身份映射需要遵循类似于域对象和映射器本身的层次结构,但是在这一点上它变得有点复杂。此外,我也有很多依赖映射需要考虑。
非常感谢任何想法/建议!