ASMX Web服务的基类 - 从它自己的基类调用派生方法

时间:2010-09-08 00:47:04

标签: c# .net asp.net web-services asmx

我有一堆asmx Web服务,并且在webservices中的所有方法都遵循一个共同的模式

public virtual TestObject Test()

{
   LogRequest;
   try
   {
    DoSomething;
   }
   catch
   {
     LogException;
   }

   LogResponse;
   return response;
}

并且所有方法都遵循这种模式,有很多代码重复;我想知道是否有一种方法可以做到这一点,即:可能在基类构造函数中?它甚至可能吗?

编辑:

模板方法模式是一个很好的解决方案,但最终我们最优雅的解决方案是AOP !!日志记录全部提取到一个方面,所有需要记录的方法都使用属性进行修饰并发布明确的规则!

3 个答案:

答案 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 !!日志记录全部提取到一个方面,所有需要记录的方法都使用属性进行修饰并发布明确的规则!