新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 软件开发 > .Net开发 > Asp.net教程 > 正文:使用Publish/Subscribe 设计模式达到对象间数据同步(二)

使用Publish/Subscribe 设计模式达到对象间数据同步(二)

新客网 XKER.COM 2004-06-06 来源: 收藏本文
在注册处理期间,subscriber被分配一个独特的标记,用来在event channel中标识subscriber。event channel也使用这个标记索引那些subscriber。 虽然样品应用作为标记目标的杂乱脉冲干扰电码使用,我推荐在你的自己的程序里使用另一个方法产生一个独特的标识符 ( 例如产生一GUID)。

使用目录菜单建立3到4个frmList窗口实例。使用新的目录菜单选项创作frmList 的3 或者4 个实例,然后在其中一个窗口中选择一个条目,双击这个条目进入可编辑模式,键入一个新的名字。窗体建立一个描述数据更新的事件并通过event channel发送。

Private Sub lvwList_AfterLabelEdit(ByVal sender As _ Object,
ByVal e As _ System.Windows.Forms.LabelEditEventArgs) _
Handles lvwList.AfterLabelEdit
Dim objEvent As clsDataEvent
If e.Label <> "" Then
objEvent = New clsDataEvent()
With objEvent
.Name = "NameChanged"
.Value = e.Label
.ExtraData = lvwList.Items(e.Item).Tag
.Origin = Me
End With
MyBase.EventChannel.PublishEvent(objEvent)
End If
End Sub
发送事件的窗体证实它是事件的创始人;并将clsDataEvent类的Origin属性设置为它自己。这样可以阻挡其他多余的事件,以确保发送者接收到的事件都是已经发布过的。最后,事件的发布者注意到了数据的改变。

所有的subscribers将收到事件。在EventApp 中,每个frmList 的实例将收到事件并且改变每个ListView中的发生变化的项目:

Public Overrides Sub EventRaise( _ ByVal NewEvent As _
EventApp.clsEvent)
Dim objListItem As ListViewItem

Select Case NewEvent.Name
Case "NameChanged"
For Each objListItem In lvwList.Items
If objListItem.Tag = NewEvent.ExtraData Then
objListItem.Text = NewEvent.Value
End If
Next
Case Else
'Handle other events
End Select
End Sub

这种事件系统类型将给你带来很大的灵活性。你可以使在应用程序中的任何一个
对象发布事件,只有那些对此感兴趣的对象的到更新的信息。也可以改变Event
Channel类的实现方式, 如可以通过使用Web service或者消息系统(如MS
Message Queue 或者 IBM MQ 系列),通过 HTTP协发送事件。
收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐