0

監査フィールドに入力する一般的な方法

エンティティが追加または変更されたときに、各エンティティの監査フィールドに入力したいと考えています。

たとえば、CustomerエンティティにはCreatedDate、がありUpdatedDateます。CreatedDate、を持つ Order エンティティについても同じですUpdatedDate

AddCustomerまたはUpdateCustomerメソッドまたはNewOrder、メソッドでそれらを更新できUpdateOrderます。

の場合AddCustomer:

customer.CreatedDate = DateTime.Now;
customer.UpdatedDate= DateTime.Now;

の場合UpdateCustomer:

customer.UpdatedDate= DateTime.Now

すべてのメソッドでコードを繰り返す代わりにやりたいことは、ジェネリック型と更新を受け入れるジェネリック メソッドを使用できますか?

private void FillAuditFields<T>(ref T entity)
{
}

の中で何をすればいいですFillAuditFieldsか (できれば) entity.CreatedBy, entity.UpdatedBy. または、これを行うより良い方法はありますか?

ご協力いただきありがとうございます

4

2 に答える 2

2

ジェネリックはまったく必要ありません。Customer クラスと Order クラスで次のようなインターフェイスを実装するだけで済みます。

public interface IAuditable
{
    DateTime CreatedDate{get;set;}
    DateTime UpdatedDate{get;set;}
}

そして、適切な場所に2つの方法があります

public void AuditableCreated(IAuditable auditable)
{
    auditable.CreatedDate = DateTime.Now;
}
public void AuditableUpdated(IAuditable auditable)
{
    auditable.UpdatedDate = DateTime.Now;
}
于 2013-03-14T17:45:18.007 に答える
1

すべてのエンティティに設定するフィールドを含むインターフェイスをエンティティに実装させ、「where」句を使用して T をそのインターフェイスを実装するクラスに制限します。

于 2013-03-14T17:44:53.530 に答える