【发布时间】:2011-10-17 04:12:03
【问题描述】:
在过去 2.5 年中完成了许多 WCF 服务和 SOA 开发,包括构建每次调用的发布-订阅服务,其中关键原则之一是开发人员应努力构建纯客户端-服务器关系,其中两个客户端都不知道服务的内部......他们应该只知道接口和服务不应该依赖于单个客户端或特定于单个客户端的细节,这让我想到了这如何适用于 C# 自己的发布订阅系统:事件处理程序。不过,这个问题确实适用于任何类似的语言。
在我看来,暴露事件然后调用这些事件的对象与 SOA 世界中的发布-订阅服务没有什么不同。本质上,在 C# 中调用事件就像是“服务”在其依赖项“客户端”之一上调用方法。当我们在 WCF 中构建 pub-sub 服务时,对客户端的回调总是异步完成的(防止客户端可能阻塞服务),并且任何由通信或未处理的客户端异常导致的故障都被隔离,再次保护服务免受其客户端的影响。
为什么在 .NET 中异步触发事件并始终在事件处理程序中处理(并吞下???)异常不是这种做法?在我的经验代码中,事件调用者依赖于处理程序的成功是糟糕的设计......你应该为你所依赖的东西调用方法。当然,暴露事件的对象并不关心处理程序需要多长时间来完成他们的工作......或者他们是否成功?
讨论!
【问题讨论】:
标签: c# events soa publish-subscribe