2

特定のオブジェクトの履歴を保持したいプロジェクトに取り組んでいます。保存時に、現在の状態を履歴に保存するメソッドを呼び出すことができるように、オブジェクトが変更されたかどうかを判断するメソッドが必要です。たとえば、ユーザーが変更を行った (または変更しなかった可能性がある) オブジェクトからフォームにデータを入力し、送信元を送信します。元のオブジェクトと、フォームから更新されたそのオブジェクトのコピーを取得し、変更されたかどうかを判断したいと考えています。さらに、ある時点で、特定のプロパティは問題ではないと判断する場合があります (たとえば、名前が変更された場合は追跡しません)。

これを達成するための最も簡単で柔軟な方法は、気になるプロパティにカスタム属性 [ChangeTracked] を指定し、リフレクションを使用してその属性を持つすべてのプロパティのリストを取得し、それらをループすることだと考えています。 A.property == B.property を比較して、変更があるかどうかを判断します。

これは機能しますか?プロパティの値が変更されたかどうかを判断するためにオブジェクトに追加できる何らかの組み込みメソッドなど、これを処理するための大幅に優れた/より簡単な方法はありますか? 解決策が何であれ、いくつかの疑似コードをいただければ幸いです。明確化のポイントとして、ソリューションは、関心のある値が作成されてから割り当てられた場合だけでなく、実際に変更されたかどうかを判断する必要があります。つまり、 Name="bob" を設定し、割り当て前に既に "bob" であったこれは変更としてカウントされません。

4

2 に答える 2

2

派手ではありませんが、これは実証済みの真の強引な方法です。IsDirty という名前のオブジェクトにプライベート プロパティを追加するだけです。追跡したいプロパティについては、IsDirty=True をプロパティ Set ルーチンに追加するだけです。より複雑な "do I care" ルールについては、それらをプロパティ セットにコーディングするだけです。

ページ ボタンのクリック イベントは、テキスト ボックスとドロップダウンからすべての値をオブジェクト プロパティに書き込む Save イベントを発生させ、オブジェクトの Save メソッドを呼び出します。このメソッドは、何かを実行する前に IsDirty プロパティをテストします。

于 2010-12-20T22:29:52.013 に答える
0

考えられる方法の 1 つは、オブジェクトが読み込まれるときに、オブジェクトのプライベート プロパティとしてオブジェクトのディープ コピーを追加することです。(ディープコピーの一方法)

保存時に、コピー オブジェクトを「ライブ」オブジェクトと比較して、変更が発生したかどうかを確認できます。

于 2010-12-20T22:22:36.570 に答える