1

データベースから多数のオブジェクトをロードしていると仮定します。これらは通常のプレーンなPHPオブジェクトであり、派手なものからの継承はありません。これらのオブジェクトのいくつかを変更してデータベースに書き戻したいが、UPDATE ...SET...クエリで実際に異なるフィールドのみを使用するとします。また、どのオブジェクトが変更されるのかを事前に知らないとします。

ロードされたすべてのオブジェクトのコピーを作成し、オブジェクトをデータベースに書き戻す必要がある場合に備えて、参照と比較のために保管しておく必要があると考えています。

私は2つの可能なアプローチを見ます:

  • ロードされたすべてのオブジェクトのクローンを作成して、別のリストに保存することができます。保存するときは、インデックスを使用してリスト内のオブジェクトを検索し、値を比較します。
  • または、ロードされたすべてのものを文字列にシリアル化して、そのままにしておくこともできます。保存するときは、文字列内でシリアル化されたオブジェクトを(何らかの方法で)見つけ、シリアル化を解除し、値を比較してください。

効率(主にメモリですが、速度も考慮事項です)の観点から、どちらが好ましいでしょうか?

4

1 に答える 1

1

オブジェクトの状態が変化したかどうかを比較するために、実際に何かが必要です。どのオブジェクトが変更されたかだけでなく、どのメンバーも追跡したい場合は、メンバーごとに状態を設定する必要があります。

元のオブジェクトを拡張したくないので(たとえば、変更されたときに無効になるフラグが設定されている可能性があります)、外部から状態を追跡する必要があります。その場合、シリアル化がおそらく最良のオプションだと思います。クローン作成はより多くのメモリを必要とします。

于 2012-04-04T13:17:45.330 に答える