我有一个相当基本的基于C#事件的系统,但我不确定我是如何在UML中建模的。我很想显示事件发布者,订阅者,处理程序和EventArgs类。我认为你使用'信号'但我找不到任何例子。任何人都能指出一个例子或放弃任何光明吗?
由于
编辑:我正在创建一个静态模型,我不需要在整个过程中表示状态或路径。对不起,如果我在最初的问题中没有说清楚的话......
答案 0 :(得分:5)
“发布者 - 订阅者”对模式(a.k.a“观察者”)可以在每个编程(语言)框架中实现不同,因此,在U.M.L中设计不同。
任何方式,从概念上讲,当发布事件(“信号”或“消息”)从发布者(也称为“服务器”)发送到任何订阅者(“客户端”)时,有时候,“id”用于标识特定事件,来自其他事件,其提供的,以及一些其他参数或数据也被发送。
正如其他答案已经提到的那样,您可能需要(类)图来描述静态模型。 (注意,有一个“聚合”,而不是“组合”,“关联”可以使用):
..............................
+--------------------------+..
| <<Publisher>> |..
| VectorDrawApp |..
+--------------------------+..
| [+] create() |..
+--------------------------+..
| [+] send(EventArgs e) |..
+------------+-------------+..
............/ \...............
............\ /...............
.............|................
.............|................
+------------+-------------+..
| <<Subscriber>> |..
| Figure |..
+--------------------------+..
| [+] create() |..
+--------------------------+..
| [+] receive(EventArgs e) |..
+--------------------------+..
..............................
+--------------------------+..
| <<Event>> |..
| EventArgs |..
+--------------------------+..
| [+] Sender: TObject |..
+--------------------------+..
| [+] receive(EventArgs e) |..
+------------+-------------+..
.............|................
.............+................
............/ \...............
...........+---+..............
.............|................
+------------+-------------+..
| <<Event>> |..
| FillEventArgs: EventArgs|..
+--------------------------+..
| [+] ForeColor |..
| [+] BackColor |..
| [+] FillStyle |..
+--------------------------+..
..............................
而且,您可能需要一个图表来描述动态模型:
.........................................
+----------------+..+----------------+...
| <<Publisher>> |..| <<Subscriber>> |...
| VectorDrawApp |..| Figure |...
+--------+-------+..+--------+-------+...
.........|...................|...........
.......+-+-+...............+-+-+.........
.......| |...send(fill)..| |..Fill().
.......| +==============>+ +---+.....
.......| |...............| |...|.....
.......| |...<<return>>..| |...|.....
.......| |<--------------+ +<--+.....
.......| |...............| |.........
.......+-+-+...............+-+-+.........
.........|...................|...........
.........X...................X...........
.........................................
在U.M.L.的刻板印象是你的“喝酒伙伴”, 并允许你描述或限制演员,对象,类, 特质或界面确实。
当你使用它们时,突出显示一个对象或类, 是类或实现的子类, 与活动相关的界面, 这是模型,即使有其他父类, 或接口。
干杯。
答案 1 :(得分:2)
如lexu和John所示,您可以使用状态图和活动图来模拟系统的某些动态方面。
对于静态模型,您可以为类可以作为操作处理的事件建模。您可以使用构造型(<<event>>
)来区分这些操作与其他操作(例如,同步调用的方法)。
答案 2 :(得分:0)
使用状态图或活动图。
答案 3 :(得分:0)
答案 4 :(得分:0)
我可能只是使用逻辑组件模型来表示源/消费者和陈规定型的操作来描述交互。
然而,作为一个左派的想法 - 另一种可能性对我而言......
我想知道您是否可以利用BPMN的某些方面。 - 许多uml工具,如sparx ea包含它
它的消息语法应该允许您描述源事件,并且您可能能够使用池或活动描述消费者/处理程序 - 而不必关心自己的内部行为。(我正在考虑一个抽象级别类似于布鲁斯·西弗的“level1”BPMN) 同样,您可以使用消息传递交互来分离有效负载/ EventArgs
如果您使用类似于sparx的东西,您可以将bpm元素中的跟踪依赖性添加到c#代码的“真实”类模型中。
答案 5 :(得分:0)
从实体生活历史角度处理问题(事件建模,参考,例如,Jackson System [of] Development):
UML and Data Modeling: A Reconciliation By David C. Hay 参考。第34页
Software Evolution with UML and XML edited by Hongji Yang &#39;实体生活历史 - 问题和问题&#39;,p142 - 我不同意btw,序列诊断。如果仅限于有关实体,可以相对容易地使用,而国家诊断。已成功说明Software Systems Architecture, Nick Rozanski, Eoin Woods,&#39;信息生命周期模型&#39;,第317页。