2

現在のアプリケーションでは、クライアントで作業しているimが、システムで発生したすべてのアクションの履歴を保存し、情報の以前の状態に戻る機能を提供することを要求しました。

例:私のアプリがストレージルームを処理する必要があり、各ユーザーがインベントリを追加/更新/削除/読み取り(すべてCRUD)できるとしましょう

ユーザーがアクションA1で製品P1を追加し、その情報を更新して、アクションA2でP2になり、その後P3、P4などになる場合。アプリケーションでは、ユーザーは製品のすべての進化を表示する画面と、ユーザーによって行われたすべてのアクションを表示する画面を表示します。ユーザーは特定のアクションを選択して「元に戻す」ことができます。

一見したところ、アクションについて必要なすべての情報を含むある種のアクションテーブルを保存すると思いました。元に戻してアクションを実行する必要がある場合は、コードの変更を元に戻すだけです。

私の問題は、製品が1つのテーブルに格納されていないが、いくつかのテーブルに分割されている場合(最適化/理解可能性などのため)、変更が正確にどこにあるかを把握する必要があります。

どのテーブルが影響を受けたかをアクションテーブルに表示し、それをBLに反映する必要がありますか????

より良い解決策があるはずだと私には思えます

4

2 に答える 2

1

私は一度そのようなことをしましたが、変更を元に戻すには、変更されたフィールドを追跡する必要があります。

このフィールドがどこに配置されたかを知っている限り、このフィールドがどこに配置されてもかまいません。したがって、BL で、すべてのフィールドが配置された場所を「認識」し、それを DB の正しいテーブル -> 列にマップする一種のヘルパー クラスを作成できます。これにより、BL 内の文字列やその他の DB 要素が削減されます。

このヘルパー クラスを DAL に入れるだけです。

変更を確認する (および/または元に戻す) 必要がある場合は、DAL に質問を送信してください...

ちなみに、MS-SQL 2008 には組み込みの変更追跡機能があるため、それを使用して変更を探すことができます。-変更追跡

于 2009-07-05T06:44:55.153 に答える
0

おそらく、より具体的なアクションを使用して、アプリケーションが何をすべきかを正確に知ることができます

DBにロジックを入れないでください

于 2009-07-04T11:53:51.140 に答える