sta*_*k72 0 wcf design-patterns principles
我有一个类用我的WCF服务处理我的应用程序中的所有交互,似乎MSDN说使用With)_语句与WCF是坏的 - 我可以看到为什么这是坏的并同意它(http:/ /msdn.microsoft.com/en-us/library/aa355056.aspx)
我的问题是,他们建议的实现方法将意味着我有10个方法[作为我的服务中的10个公共方法]将具有相同的结构代码,这当然不遵循DRY主体 - 代码看起来类似于以下:
try
{
results = _client.MethodCall(input parameteres);
_client.Close();
}
catch (CommunicationException)
{
if (_client != null && _client.State != CommunicationState.Closed)
{
_client.Abort();
}
}
catch (TimeoutException)
{
if (_client != null && _client.State != CommunicationState.Closed)
{
_client.Abort();
}
}
catch (Exception ex)
{
if (_client != null && _client.State != CommunicationState.Closed)
{
_client.Abort();
}
throw;
}
Run Code Online (Sandbox Code Playgroud)
这还没有任何日志记录,但当然我开始记录它时,我将不得不在几乎10个不同的地方添加日志记录工作
有没有人有任何关于我如何在重用代码方面更有资源的提示
谢谢
保罗
我会使用一些通用的,可配置的异常处理组件,它允许基本的异常处理处理(如日志记录,重新抛出等)与实际处理位置分离.此类组件的一个示例是Microsoft的异常处理应用程序块.
然后你可能会得到这样的代码:
try
{
results = _client.MethodCall(input parameteres);
_client.Close();
}
catch (Exception ex)
{
_client.CloseIfNeeded();
if (!ex.Handle("Wcf.Policy")) throw;
}
Run Code Online (Sandbox Code Playgroud)
where CloseIfNeeded表示封装WCF通道关闭逻辑的自定义扩展方法,Handle异常方法调用异常处理机制,传入应在此位置应用的异常策略的名称.
在大多数情况下,您可以将异常处理逻辑减少到一行或两行代码,从而为您带来以下好处: