在物件導向開發中,觀察者模式經常應用於模組化與封裝的設計中。它能讓物件以彈性的方式傳遞訊息,是實現鬆耦合的一種常見做法。
而在 C# 中,常用 event
、Action
/ Func
、RX
等方式實作觀察者模式,看似達成了解耦。但實際上,訂閱者仍需知道事件來源,這造成一種隱性耦合,讓物件之間仍有依賴。
CommunityToolkit.Mvvm
套件中,除了提供 MVVM 架構下常用的 ObservableObject
與 ObservableValidator
外,還支援基於中介者模式的訊息傳遞機制 Messenger
。
該機制讓訊息的發送者與觀察者無需彼此參照,只需註冊並透過 Messenger
發送訊息,就能由框架轉發給所有訂閱者。為了整合這套機制,套件也提供了 ObservableRecipient
類別,讓 ViewModel 更容易註冊與接收訊息。
這邊要注意的是,使用 Messenger
並不代表完全沒有耦合,而是將依賴轉向了中介物件 ( Messenger
本身),達成相對鬆耦合的設計。
本次將使用 WPF 並搭配 CommunityToolkit.Mvvm
套件的ObservableRecipient
物件與 Messenger
機制,實作訊息傳遞的示範。