【问题标题】:C# Events compared to WCF/SOA Pub-Sub services: Protecting objects from their subscribersC# 事件与 WCF/SOA Pub-Sub 服务的比较:保护对象免受订阅者的侵害
【发布时间】:2011-10-17 04:12:03
【问题描述】:

在过去 2.5 年中完成了许多 WCF 服务和 SOA 开发,包括构建每次调用的发布-订阅服务,其中关键原则之一是开发人员应努力构建纯客户端-服务器关系,其中两个客户端都不知道服务的内部......他们应该只知道接口和服务不应该依赖于单个客户端或特定于单个客户端的细节,这让我想到了这如何适用于 C# 自己的发布订阅系统:事件处理程序。不过,这个问题确实适用于任何类似的语言。

在我看来,暴露事件然后调用这些事件的对象与 SOA 世界中的发布-订阅服务没有什么不同。本质上,在 C# 中调用事件就像是“服务”在其依赖项“客户端”之一上调用方法。当我们在 WCF 中构建 pub-sub 服务时,对客户端的回调总是异步完成的(防止客户端可能阻塞服务),并且任何由通信或未处理的客户端异常导致的故障都被隔离,再次保护服务免受其客户端的影响。

为什么在 .NET 中异步触发事件并始终在事件处理程序中处理(并吞下???)异常不是这种做法?在我的经验代码中,事件调用者依赖于处理程序的成功是糟糕的设计......你应该为你所依赖的东西调用方法。当然,暴露事件的对象并不关心处理程序需要多长时间来完成他们的工作......或者他们是否成功?

讨论!

【问题讨论】:

    标签: c# events soa publish-subscribe


    【解决方案1】:

    最终,在设计语言时需要考虑许多设计因素。现在我可以想出一些具体的论据来以目前的方式实现事件:

    首先,简单。实施火灾后忘记系统几乎不可能作为编码人员实施火灾和反应系统。然而,实施火灾和反应系统使得实施火灾和遗忘系统变得容易。除此之外,事件非常简单。事件只是多播委托,只有声明类可以触发它们。不多也不少。

    其次,.NET 核心框架中的一些代码依赖于事件系统以及触发和反应系统。例如 Winforms BeforeExit 事件,它有可能在事件参数中取消。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-20
      • 2018-05-13
      • 1970-01-01
      • 1970-01-01
      • 2012-02-15
      • 2010-10-16
      • 2017-11-06
      • 1970-01-01
      相关资源
      最近更新 更多