1
15
让做工作的类为他们感兴趣的事件注册……一个 event broker 模式。
|
2
5
您还可以使用某种IOC框架(如spring.net)来注入字典。这样,如果您得到一个新的消息类型,就不必重新编译这个中心集线器——只需更改一个配置文件。 期待已久的例子: 创建一个名为example的新控制台应用程序,并添加:
以及app.config文件:
输出: Type 1, Example.Type1EventArgs Type 2, Example.Type2EventArgs No handler defined for event type: EventArgs
正如你所看到的,
字典的值为“对象”类型,而不是
关于国际奥委会和DI的一些其他问题: |
3
0
我看不到您的其他代码,但我会尝试创建数量少得多的事件arg类。相反,创建一些在包含的数据和/或以后处理它们的方式方面彼此相似的字段,并添加一个字段,该字段将告诉您发生了什么类型的事件(可能应该使用枚举)。 理想情况下,您不仅可以使这个构造函数更具可读性,还可以使消息的处理方式(在单个事件处理程序中以类似方式处理的消息分组) |
4
0
也许,不要为每个消息使用不同的类,而是使用标识消息的标志。 这将大大减少您拥有的消息数量,并提高可维护性。我的猜测是大多数消息类的差异大约为零。 很难选择一种额外的攻击方法,因为架构的其余部分(对我来说)是未知的。 例如,如果您查看Windows,它就不知道如何处理可能抛出的每个消息。相反,底层消息处理程序向主线程注册回调函数。 你可能会采取类似的方法。每个消息类都需要知道如何处理自己,并且可以在较大的应用程序中注册自己。这将大大简化代码并消除紧密耦合。 |
5
0
显然,您需要一种调度机制:根据接收到的事件,您需要执行不同的代码。 您似乎使用类型系统来识别事件,而实际上它是为了支持多态性。正如ChrisLively所建议的,您也可以(不滥用类型系统)使用枚举来标识消息。 或者,您可以接受类型系统的强大功能,并创建一个注册表对象,在其中注册每种类型的事件(通过静态实例、配置文件或其他方式)。然后您可以使用责任链模式来找到合适的处理程序。处理程序自己进行处理,或者它可能是一个工厂,创建一个处理事件的对象。 后一种方法看起来有点未指定和过度设计,但是在99种事件类型(已经)的情况下,我觉得它是合适的。 |