我參與了一個能夠實時連接到不同硬件設備的項目。我們已經被分配製作一個觸摸屏GUI,所以我們有一個MMI到設備。由於任何設備(以及任何類型的設備)都可能連接到我們的框架,因此我們決定讓第三方設備開發人員製作他們自己的GUI插件。所有這一切都很好,現在到此爲止:)WPF GUI插件設計。我需要一個小小的反饋
真正的問題是,我們的經理希望這些圖形用戶界面能夠執行某些形式的控制流程,並且他不想讓我們擁有自己的DSL--因此,我們在WPF中執行GUI,他們必須能夠執行MSIL。這是一個巨大的安全威脅,我告訴他,但是因爲它是一個原型,所以他說沒問題。好吧,很好。
雖然有另一個問題 - 任意MSIL可能會崩潰或死鎖,所以我們需要在某種異步上下文中託管它。由於WPF不允許多個線程訪問圖形用戶界面,所以我們已經爲自己設置了一個複雜的場景..
到目前爲止,我對如何解決這個問題的想法相當缺乏見解。我最好的選擇是將GUI部分和代碼部分分成兩部分:用於GUI的Raw Xaml以及用於代碼的另一個線程中託管的MSIL。然後,我需要創建一個Facade(運行時?),通過向其他線程發送調用來將GUI和MSIL鏈接在一起。
我可以做到這一點,不是問題,但我認爲它真的很臭。您迫使其他開發人員無需使用代碼就可以使用MVVM,我不確定是否可以支持所有綁定,並且我不喜歡View和ViewModel在單獨的線程中(嗯,我不介意,但我不確定它是否會導致問題,因爲這個設計對於插件開發人員來說是非常透明的,所以他不會考慮讓東東線程安全)。
有沒有人有任何想法如何設計呢?還是對需求的想法?任何形式的反饋都會很好。
謝謝你的意見。我和我的一位朋友進行了一些冗長的討論,發現了這個問題和O/S在運行代碼時遇到的問題之間的很多相似之處。除非我們比微軟,Apple或整個* Nix社區更聰明,否則沒有解決方案。甚至沒有理由在異步環境中運行所有東西:)最好的辦法是在插件加載到GUI之前驗證,測試和簽名插件。 那麼,這是我們的結論:)我會接受這個答案,因爲它提供了最好的反饋:) – cwap 2009-10-16 12:45:53