首先,有我的博客上提供一點背景的這個問題:消息傳遞的插件框架
- http://www.codebork.com/coding/2008/06/25/message-passing-a-plug-framework.html
- http://www.codebork.com/coding/2008/07/31/message-passing-2.html
我知道,描述不是非常清楚,所以我會盡力總結我在這裏盡力而爲的嘗試。該應用程序是一個個人財務計劃。關於框架本身的進一步背景可以在這篇文章的末尾找到。
框架可以處理多種不同類型的插件(例如帳戶,導出,報告等)。但是,我關注的是一個特定的插件類,即所謂的數據插件,因爲這是導致我遇到問題的類。我有一類數據插件的賬戶,一個用於交易等
我中途已經給我留下了下面的架構數據插件廣闊的再保:
- 數據插件對象(實現intialisation,安裝和插入式元數據)[器具
IDataPlugin<FactoryType>
] - 的數據對象(例如,賬戶)[器具,例如,
IAccount
] - 甲工廠創建實例的數據對象[實現,例如,
IAccountFactory
]
此前數據對象和插件對象合併爲一個,但這意味着必須爲帳戶中記錄的每個事務實例化新的事務插件,這會導致一些問題。不幸的是,這種重新分解破壞了我的信息傳遞。數據對象實現了INotifyPropertyChanged
,所以我遇到了一個新問題,並且我不確定如何解決這個問題:插件對象正在向消息代理註冊事件,但它實際上是數據對象事件。這意味着訂閱插件目前必須訂閱每個創建的帳戶,交易等!這顯然不可擴展。
至於我當時可以告訴我有兩個可能的解決方案:
- 使數據插件對象的穿針引線的數據對象和消息代理,可能分批更改通知。我不喜歡這樣,因爲它給消息傳遞系統增加了另一層複雜性,我覺得我應該可以不做。
- 垃圾當前基於事件的實現並使用其他更容易管理的內存(內存中的WCF ?!)。
所以我想我真的問:
- 你會如何解決這個問題?
- 您認爲我忽視了哪些潛在解決方案?
- 我的方法甚至隱約地在軌道上/明智的?!:-)
從博客文章的日期可以看出,這個問題的一些變體現在已經徵稅了相當長的一段時間!因此,任何和所有的答覆將不勝感激。
的背景框架本身如下:
我的插件框架由三個主要部分組成:一個插件經紀人,一個偏好管理器和消息代理。插件代理執行面包和黃油插件:發現和創建插件。偏好管理器管理框架和各個插件的用戶偏好,例如啓用了哪些插件,數據應該保存在哪裏等。通信是通過發佈/訂閱,消息代理坐在中間,收集所有發佈的消息類型和管理訂閱。發佈/訂閱目前通過.NET
INotifyPropertyChanged
界面實現,該界面提供了一個名爲PropertyChanged
的事件;消息代理構建了一個實現INotifyPropertyChanged
的所有插件的列表,並訂閱其他插件此事件。消息傳遞的目的是允許帳戶和事務插件通知存儲插件數據已更改,以便可以保存它。