我正在做很多重复,例如在每个服务方式.
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#技巧重复位的代码所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)