2010-05-10 61 views
1

我正在構建一個提供應用程序自動化服務的Windows窗體系統(在C#中,如果它對任何人都很重要)。由於這個應用程序針對的是不懂計算機的用戶,因此我決定使用嚮導用戶界面爲用戶簡化內容。我想避免將視圖和視圖引擎(從中構建嚮導)耦合到自動化引擎。我該如何設計一個基於SoC的基於嚮導的系統?

我遇到的問題是自動化引擎在它做它的事情時在一個單獨的線程上運行,需要向用戶報告狀態信息,以及監聽用戶的取消或暫停事件。由於我不希望視圖引擎或自動引擎互相依賴,我很難搞清楚如何提供這個信息管道。

對此問題的任何見解我將不勝感激。在這一點上,我幾個星期來一直在困擾着我的大腦,我真的不想放棄,只是把所有的東西結合在一起。

如果有人需要更多的細節來幫助想出一些想法,請讓我知道,我會很樂意爲他們提供。

回答

1

爲什麼不在中間有一個線程安全對象,作爲兩者之間的通信平臺?這個類將擁有自己的事件以及提供輸入和提取所需信息的方法的屬性和方法。你甚至可以更進一步,如果你有多個嚮導和自動化平臺同時運行,如果它們是唯一可識別的,我會設置一個嚮導ID到平臺id的散列,並且你的對象可以處理多個對的通信時間。這需要非常小心,一切都是線程安全的,並且您正在執行的通信僅使用與該向導平臺對相關的信息。

我知道這是一個廣泛的答案,但我會先看看這種方法。它爲您提供所需的關注點分離,併爲您提供一個可以像設計一樣多功能的溝通平臺。

最後,一個建議的話,你可能不需要。你不應該讓通信類依賴於任何可能導致你遇到循環引用問題的事情。我會盡可能地把這個類作爲不可知論的對象,它所要求的任何對象都應該與嚮導/平臺所需的對象分開,除非這些對象本質上是非常通用的,這樣就可以真正分離關注點。

希望這會有所幫助。

+0

我最終創建了一個消息管道,可以將它傳遞給視圖引擎(及其視圖)以及它們需要與之通信的服務。謝謝=) – 2010-06-08 14:12:08

+0

謝謝你讓我知道。我很高興我的建議爲你解決。 – joshlrogers 2010-06-08 16:19:19