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

时间:2012-07-02 18:49:08

标签: c# events delegates uml

我正在设计一个实体/组件系统,其中实体内部通信的问题由事件消息系统解决。组件分为两部分,一部分在实体中,一部分在子系统中的“实体代理”,通过观察者类型系统保持同步。我正在尝试使用事件和代理进行实现。

我正在尝试对应用程序的事件/消息系统的结构进行建模,但我遇到了代理问题。它现在的方式是显示系统中的委托,eventArgs和实​​体的图表(附加),但是它们之间的关系的性质仅表示为通用关联。我还有第二张图显示了系统的接口。我需要显示在这些对象中引发的事件,因为这是系统中大部分复杂性的原因。

我知道我也需要动态协作和时序图,但我想弄清楚我需要什么样的类型和多少不同的事件支持类以及继承结构的样子。我想给自己一些我知道将一起工作的消息类型。我想我可以从这些预定义的类型中选择一个EventArgs派生和委托类型,以便在动态图表和组件构建时重用。

我无法弄清楚的主要事情是将事件建模为属性还是操作。我一直在尝试使用委托的关联类和带有事件构造型的OnSomeEvent()类型操作。我不喜欢这个,因为事件不是一个操作。我已经使用这个On ****()命名约定在代码中保护了方法。这种方法并未真正捕获委托签名,多播行为和观察者模式。

其他人用什么方法来表达这些复杂且紧密耦合的类?对我来说,图表的要点是既记录又更完整地理解系统中的接口。在我的过程的这个阶段,我希望冻结接口并继续实现组件本身。 enter image description here

2 个答案:

答案 0 :(得分:4)

我不会在静态类图中包含信令字符,因为信令(它的用途是什么)是一种动态行为。我会把事件代表保持原样(即带有他们的签名)并将它们包括在一个类的普通操作中。我认为这符合一个对象能够非常合适地发送事件的想法,并且它指定了事件的类型。

哪些信号将在哪里以及谁订阅谁应该在动态图表中建模。

修改

您是否考虑过添加&lt;&lt; <事件&gt;&gt; &lt;&lt;信号&gt;&gt; 来分类你的类?

答案 1 :(得分:1)

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

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

另一方面,UML是一种半形式语言,它使得两个不相关的状态机之间的事件排序之类的事情例如无法保证,尽管这可以通过使用诸如MARTE的UML配置文件来定义(已经很长一段时间我没看过它所以事情可能已经改变了)