2014-06-05 64 views
0

當涉及到在後臺工作的處理程序時,在處理程序實例上實現IEventAggregator是否合法,然後通知ViewModel有關進度?在我看來,處理程序根本不是模型。在ViewModel中的其他類中是否實現IEventAggregator中斷MVVM?

例如,如果我們得到一個MyHandler類正在啓動一個線程MyThread使用函數MyFunction這是不斷報告處理程序中發生的進度。

我研究了很多,如果這確實打破MVVM,但什麼都沒發現。那是怎麼考慮的?

+0

目的只是報告'進度對話框'中的進度? –

+0

@lll不,我希望ViewModel更新一些信息和綁定。 – 0x8BADF00D

+0

你可能沒有在事件聚合器上找到太多的工作,因爲RX是一個有利的選擇。同樣的區別,但你很可能會發現搜索這些解決方案更有意義。 –

回答

1

MVVM不是一個嚴格的規範,雖然可能會在模式的更廣泛方面達成共識,但很少有人會關注實現細節。

也許在你的情況中要問的問題是:視圖模型可以在NUnit或SpecFlow中獨立引發,並且測試的覆蓋面很好。如果答案是肯定的,那麼在爲這個模式提供一個大目標之後,你可以放心一些。其次,您可以詢問處理程序是否嚴格是一個出版商,其行爲無需特別瞭解訂閱者的身份。如果答案是肯定的,那是另一個有利的指示。最後,儘管需要更新和設置一些綁定,視圖模型可以與模擬處理程序交互嗎?這將是另一個有利的跡象。

您所在位置的某些開發人員可能會選擇使用Reactive Extensions中的IObservable作爲發佈工具(我將自己歸入該組),但在此級別上,它基本上是實施決策,不一定是設計決策。

模塊化,可測試性和透明度在MVVM模式的強大應用程序中扮演着非常重要的角色。如果您正在實現這些目標,那麼是否符合某人的MVVM概念將僅基於您的溝通/說服能力。

+0

處理程序確實是一個嚴格的出版商,不知道訂閱者,但我從來沒有見過有人在模型或其他類上實現'IEventAggregator'。這就是爲什麼我問,我有點驚訝,以前沒有人問過。 _might選擇使用Reactive Extensions_中的IObservable是什麼意思?你可以在這裏瞭解更多細節嗎? – 0x8BADF00D

+0

反應式擴展比Prism更「原生」(即內置於.NET)。它比聚合器更靈活,所以開發者可以選擇使用它。 –

+0

我已經研究了RX中的'IObservable'和事件機制,但實際上我還不確定使用RX而不是Caliburn.Micro(或兩者)。因爲IEventAggregator將完全滿足我的需求,所以我沒有看到有'IObservable'的真正區別。感謝您的支持。最後,在你提到上述情況的時候,你會說這兩個結構之間有什麼區別嗎,不過'IObservable'在某些時候可能更加靈活? – 0x8BADF00D

相關問題