使用Publish/Subscribe 設計模式達到對象間資料同步(二)

來源:互聯網
上載者:User
對象|設計|資料|資料同步 在註冊處理期間,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協發送事件。


相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。