我有一堆asmx Web服务,并且在webservices中的所有方法都遵循一个共同的模式
public virtual TestObject Test()
{
LogRequest;
try
{
DoSomething;
}
catch
{
LogException;
}
LogResponse;
return response;
}
并且所有方法都遵循这种模式,有很多代码重复;我想知道是否有一种方法可以做到这一点,即:可能在基类构造函数中?它甚至可能吗?
模板方法模式是一个很好的解决方案,但最终我们最优雅的解决方案是AOP !!日志记录全部提取到一个方面,所有需要记录的方法都使用属性进行修饰并发布明确的规则!
答案 0 :(得分:3)
您可以在某个地方(在基类中或在任何地方声明为静态)创建一个方法来执行所有常见的操作:
T DoCommon<T>(Request r, Func<T> f)
{
LogRequest(r);
T result;
try { result = f(); }
catch(Exception ex) { LogException(ex); }
LogResult(result);
return result;
}
然后你只需要调用该方法:
public virtual TestObject Test()
{
return DoCommon(Request, () => DoSomething());
}
答案 1 :(得分:2)
听起来你正在寻找Template Method pattern。该模式允许您在超类中定义一系列步骤(以及这些步骤的默认实现,如果适用) - 然后子类只需覆盖与其特定处理相关的步骤。
答案 2 :(得分:0)
模板方法模式是一个很好的解决方案,但最终我们最优雅的解决方案是AOP !!日志记录全部提取到一个方面,所有需要记录的方法都使用属性进行修饰并发布明确的规则!