设计模式 C#技巧重复位的代码

设计模式 C#技巧重复位的代码,第1张

概述我有一个WCF服务记录任何异常,然后将它们作为FaultExceptions抛出. 我正在做很多重复,例如在每个服务方式. try { // do some work}catch(Exception ex){ Logger.log(ex); // actually will be Fault Exception but you get the idea. throw 我有一个WCF服务记录任何异常,然后将它们作为FaultExceptions抛出.

我正在做很多重复,例如在每个服务方式.

try {    // do some work}catch(Exception ex){  Logger.log(ex);  // actually will be Fault Exception but you get the IDea.  throw ex;}

我正在寻找一种更优雅的方式来做到这一点,因为我在每个服务中剪切和粘贴try / catch.

有没有一个设计模式/ C#技巧可以用来使这更优雅?

解决方法 你在说AOP – Aspect Oriented Programming

这是我通过将“工作”作为lambda传递的方式:

public partial static class Aspect{  public static T HandleFaultException<T>( Func<T> fn )  {    try    {       return fn();    }    catch( FaultException ex )    {      Logger.log(ex);      throw;    }  }}

然后用它:

return Aspect.HandleFaultException( () =>  {    // call WCF  });

还有其他方法可以实现同样的目标,甚至是一些商业产品,但我觉得这样做是最明确和灵活的.

例如,您可以编写一个为您创建和处置客户端的方面:

public partial static class Aspect{  public static T CallClIEnt<T>( Func<ClIEnt,T> fn )  {    using ( var clIEnt = ... create clIEnt ... )    {      return fn( clIEnt );    }  }}

所以:

return Aspect.CallClIEnt( clIEnt =>  {    return clIEnt.Method( ... );  });

然后,您可以包装通常要应用的所有方面,并创建一个主要方面.

总结

以上是内存溢出为你收集整理的设计模式/ C#技巧重复位代码全部内容,希望文章能够帮你解决设计模式/ C#技巧重复位的代码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1260191.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存