c#事件与WCF/SOA Pub-Sub服务的比较:从订阅者那里保护对象

本文关键字:对象 保护 那里 比较 WCF 事件 SOA 服务 Pub-Sub | 更新日期: 2023-09-27 18:11:20

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

在我看来,公开事件然后调用这些事件的对象与SOA世界中的发布-订阅服务没有什么不同。从本质上讲,在c#中调用事件就像一个"服务"在它的一个依赖的"客户端"上调用一个方法。当我们在WCF中构建发布-订阅服务时,对客户端的回调总是异步完成的(防止客户端可能阻塞服务),并且由于通信或未处理的客户端异常导致的任何错误都被隔离,再次保护服务不受客户端的影响。

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

讨论!

c#事件与WCF/SOA Pub-Sub服务的比较:从订阅者那里保护对象

最后,在设计语言时需要考虑许多设计因素。现在我可以想到一些具体的参数来实现事件的方式,它目前是:

首先是简单性。作为一名编码人员,执行"即发即弃"系统几乎不可能执行"即发即反应"系统。然而,实现"着火和反应"系统使得实现"着火和忘记"系统变得很容易。除此之外,事件是非常直接的。事件只是多播委托,只有声明类才能触发它们。不多不少。

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