これは、HRシステムの場合でも数年前に行う必要がありました。ここで
は私がダウンしてトリミング作られたテンプレートの例である:
class DataField<T>
{
public T Current { get; set; }
public T Original { get; set; }
// stores the field name as a nice textual readable representation.
// would default to property name if not defined.
public string FieldName { get; set; }
public bool Modified
{
get { return !(Current.Equals(Original));
}
public DataField(T value)
{
Original = Current = value;
}
public DataField(T value, T fieldName)
{
Original = Current = value;
FieldName = fieldName;
}
}
簡単auditting作られ、それについての興味深い部分があることだった私はそれがすべての私の「フィールド」は、テンプレート(ジェネリック)を実装した達成しました各オブジェクトは独自の監査ログを生成できます。私はこれらのフィールドのx番号を持つ可能性のあるオブジェクトを取ることができ、GetAuditを呼び出すと、フィールド名、古いval、新しいvalなどを示すクラスに対するすべての変更を含む監査オブジェクトが返されます。 'DataField'は、監査オブジェクトを返すメソッドを実装します。文字列、倍精度、intsなどの場合、それはかなり焼き付けられましたが、カスタムオブジェクトを使用した場合、Auditオブジェクトを返すだけの監査実装を記述することができます。
最終的に典型的なフォームでは、これらすべてのタイプのフィールドを持つ1つのオブジェクトにすべてのデータが格納されます。私はその後、更新を行い、監査テーブルにも書き込まれるGetAuditメソッドを呼び出します。何が彼らは複数のページを経由しなければならなかった場合でも形に変わっていた場合、私は簡単に言うことができる
など
は、元に戻すのにもフィールド、セクションごとにまたは全体のオブジェクトレベルでフィールド上で本当に簡単でした。
私は長い間コードに触れていませんでしたが、それはその要点でした。希望が役立ちます。
すでにAOPを検討しましたか? – Paco