我参与了一个能够实时连接到不同硬件设备的项目。我们已经被分配制作一个触摸屏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