如何将类似的方法调用组合到委托模式中?

时间:2010-04-30 21:29:34

标签: c# delegates

我有三种方法:

public void Save<T>(T entity)
{
    using (new Transaction())
    {
        Session.Save(entity);
    }
}

public void Create<T>(T entity)
{
    using (new Transaction())
    {
        Session.Create(entity);
    }
}

public void Delete<T>(T entity)
{
    using (new Transaction())
    {
        Session.Delete(entity);
    }
}

如您所见,唯一不同的是using块内的方法调用。我怎样才能重写这个,所以它是这样的:

public void Save<T>(T entity)
{
    TransactionWrapper(Session.Save(entity));
}

public void Create<T>(T entity)
{
    TransactionWrapper(Session.Create(entity));
}

public void Save<T>(T entity)
{
    TransactionWrapper(Session.Save(entity));
}

换句话说,我将方法调用作为参数传递,TransactionWrapper方法围绕方法调用包装事务。

1 个答案:

答案 0 :(得分:4)

您可以将Action<T>传递给方法以指定要执行的操作:

private void ExecuteInTransaction<T>(Action<T> action, T entity)
{
    using (new Transaction())
    {
        action(entity);
    }
}

public void Save<T>(T entity)
{
    ExecuteInTransaction(Session.Save, entity);
}

但如果您的 ExecuteInTransaction 方法并不复杂,那么IMO对您原始代码的改进并不值得。