PHP でデータ マッパーを作成しており、ドメイン オブジェクトがクラス テーブルの継承に従う場合にアイデンティティ マップを実装する方法を考えています。
私が見ているように、問題は、階層オブジェクトが階層データに依存しているため、データがメモリ内モデルで 1 回だけ明示されることをアイデンティティ マップが保証できないことです。
たとえば、私のデータベースには、親テーブルと子テーブルがあります。私のドメイン モデルには、Parent クラスがあり、そこから拡張された Child クラスがあります。親オブジェクトと子オブジェクトの両方をインスタンス化し、それらの ID を ID マップに記録できます。問題はありません。クライアント コードが同じ親または子を要求する場合、データベースではなくキャッシュから返すことができます。問題はありません。
しかし、親と子の両方が同じ親レコードに関連付けられている場合はどうなるでしょうか? つまり、親テーブルの同じデータですか? そのデータがメモリ内で 2 回表示されるようになりました。一方 (または両方) のインスタンスで変更された場合、変更を上書きする危険があります。
どういうわけか、アイデンティティ マップはドメイン オブジェクトとマッパー自体と同様の階層に従う必要があるように思えますが、その時点で少し複雑になります。また、考慮すべき従属マッピングもたくさんあります。
どんなアイデアやアドバイスも大歓迎です!