2

PHP でデータ マッパーを作成しており、ドメイン オブジェクトがクラス テーブルの継承に従う場合にアイデンティティ マップを実装する方法を考えています。

私が見ているように、問題は、階層オブジェクトが階層データに依存しているため、データがメモリ内モデルで 1 回だけ明示されることをアイデンティティ マップが保証できないことです。

たとえば、私のデータベースには、親テーブルと子テーブルがあります。私のドメイン モデルには、Parent クラスがあり、そこから拡張された Child クラスがあります。親オブジェクトと子オブジェクトの両方をインスタンス化し、それらの ID を ID マップに記録できます。問題はありません。クライアント コードが同じ親または子を要求する場合、データベースではなくキャッシュから返すことができます。問題はありません。

しかし、親と子の両方が同じ親レコードに関連付けられている場合はどうなるでしょうか? つまり、親テーブルの同じデータですか? そのデータがメモリ内で 2 回表示されるようになりました。一方 (または両方) のインスタンスで変更された場合、変更を上書きする危険があります。

どういうわけか、アイデンティティ マップはドメイン オブジェクトとマッパー自体と同様の階層に従う必要があるように思えますが、その時点で少し複雑になります。また、考慮すべき従属マッピングもたくさんあります。

どんなアイデアやアドバイスも大歓迎です!

4

2 に答える 2

0

インターフェイス iQueueable を定義しました。このインターフェイスを実装するオブジェクトのみをキューに入れ、変更をデータベースに書き込むことができます。

子オブジェクトには完全なオブジェクト プロパティがあるため、iQueueable を実装します。親オブジェクトはキューに入れることができません。

これにより、親オブジェクトと子オブジェクトの同期が失われる可能性は残りますが、データベース変更のソースは 1 つだけになります。

于 2012-07-03T01:51:05.467 に答える
0

繰り返し/重複するデータがたくさんある場合は、設計が間違っています...

つまり、親が子供と共有するアドレスを持っている場合、アドレステーブルが必要であり、それらの各レコードはアドレステーブル内の単一のエントリを指します。

次に、関連するルールを持つアプリのケースです。つまり、子アカウントで住所が変更された場合...どうしますか? 更新 (つまり、親も新しいアドレスを持つことを意味します) または新しいアドレスを挿入します。

于 2012-05-24T08:17:12.810 に答える