我正在研究一个C#GUI应用程序,并且想知道将一些不相关的事件组合在一起作为静态事件将JavaScript风格组合成一个类是不好的形式,因此订阅者不需要获得引用任何负责提升它们的对象,直到它们被引发为止。我的理由是,这将极大地解耦代码,并为任何事件保留一个参考,所以我不需要搜索对象引用,如果我需要稍后重构/重做一些实现,他们只有大型应用程序的大接口正在引发这一事件。
有问题的事件本质上是全局性的(即视图已更改,资产已下载等)并且主要用于视图或控制器对象可以中继状态更改/更改事件内容。
答案 0 :(得分:3)
您描述的模式是“Pub / Sub Architecture”。一些对象将其事件推送到中心位置,然后其他一些对象从该中心位置订阅并根据需要得到通知。
我不建议初学者自己实现这个系统,因为它很容易出错并导致对象意外生根并且无法进行垃圾回收,导致内存泄漏。
我喜欢使用Prism's PubSubEvents library,它易于使用且不会导致内存泄漏。有关示例用法,请参阅prism文档的“Event Aggregation”部分。