c# .net事件构造应如何在UML类图中最好地表示?

5
我正在设计一个实体/组件系统,其中针对实体内部通信问题采用了事件消息系统。将组件分为两个部分,一个在实体中,另一个是在子系统中的"实体代理",通过观察者类型系统保持同步。我正在尝试使用事件和委托来实现这个系统。
我试图模拟应用程序的事件/消息系统的结构,但是我在委托上遇到了困难。目前的方式是一个显示委托、事件参数和系统中的实体的图表(见附图),但它们之间的关系的本质只被表示为一般关联。我还有第二个图表显示系统的接口。我需要展示这些对象中引发的事件,因为这是系统中大部分复杂性所在。
我知道我还需要动态协作和时序图,但我正试图弄清楚需要多少不同的事件支持类以及继承结构会是什么样子。我想给自己提供一个已知可以配合使用的消息类型选择。我认为,然后我就可以从这些预定义类型中选择EventArgs衍生类型和委托类型,在动态图形和组件构建时间重复使用。
我无法找出的主要问题是将事件建模为属性或操作。我一直在尝试使用委托的关联类和一个带有事件原型的OnSomeEvent()类型操作。我不喜欢这个方法,因为事件不是一个操作。我在代码中已经有了这个On****() 命名约定的受保护方法。这种方法并没有真正捕获委托签名、多播行为和观察者模式。
其他人使用哪种方法来表达这些复杂而紧密耦合的类?对我来说,图表的目的是记录和更完整地理解系统中的接口。在我的设计过程中,我希望冻结接口并继续实现组件本身。
2个回答

4
我不会在静态类图中包含信号字符,因为信号(即事件)是一种动态行为。我会将事件委托作为普通操作包括在类中,保留其签名。这样做符合对象能够发送事件的想法,并且明确了事件的类型。
哪些信号去到何处以及谁订阅了谁应该在动态图中建模。
编辑:你考虑过像<>或<>这样的构造型来对类上的属性进行分类吗?

我昨天发现了通用的事件处理程序(EventHandler<EventArgsT>),所以我想我将删除自定义委托并尝试您的建议。还有另一个显示实现这里所示接口的类的更详细信息的图表。该图表源于需要定义我在首次尝试对“开始新游戏/地图初始化”用例建模时引用的类型。似乎每次交互都会添加两个新类!我明白为什么团队在游戏项目中如此常见。 - Sinthia V

1

当从静态角度观察模型时,事件和委托被视为简单的方法。一些工具通过提供构造型或标记来扩展规范,以将您的方法显示为事件/委托并将其与普通方法区分开来。

另一方面,您的事件和委托参数应建模为类。当时间因素添加到您的模型中时,事件就有了意义,在这种情况下,您可以利用UML event and trigger元素(支持synchronous and asynchronous消息传递)。

顺便说一下,UML是一种半正式语言,例如在两个不相关的状态机之间定义事件序列等事情并不保证,尽管可以使用UML配置文件(如MARTE)来定义它(我已经很久没有看过它了,所以事情可能已经改变了)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接