【问题标题】:How to design an application that can use multiple GUI libraries?如何设计一个可以使用多个 GUI 库的应用程序?
【发布时间】:2014-12-05 19:20:19
【问题描述】:

我面临以下设计问题:想象一个应用程序有 2 个主要部分,一个用于通信 (COM),一个用于用户界面 (UI)。两者都是不同文件的不同库。现在,我想保持 UI 模块化,以便将来能够使用不同的库(即 GTK、Qt、WinForms 等)对其进行更新。 问题是:COM 与设备的接口,有时可能不同,它必须在应用程序设置表单/窗口中显示配置视图。由于每个新的 COM 实现可能因配置数据不同而有所不同,因此每个更改都必须反映到设置表单/窗口中。

我怎样才能保持我的应用程序模块化,而不必在每次新的 COM 实现时都重新设计整个 UI?

我想动态加载一个 COM 库和一个设置库。最后一个将直接依赖于当前的 COM 实现,与它自己的配置数据交互。 如果我更改 COM 实现,我只需要重新实现 Settings 库并让框架在运行时使用 COM 加载它。

这个解决方案对我来说有点棘手。您还有其他建议吗?

谢谢你的建议。

【问题讨论】:

    标签: design-patterns dynamic


    【解决方案1】:

    除了@Floegipoky 答案之外,我认为您会发现 Martin Fowler 的 Separated Presentation 很有帮助。 MVC 的核心,以及对后来的框架影响最大的想法,已经是上面提到的分离表示。它背后的想法是在模拟我们对现实世界的感知的域对象和作为我们在屏幕上看到的 GUI 元素的表示对象之间进行清晰的划分。领域对象应该是完全自包含的,并且可以在不参考表示的情况下工作,它们还应该能够支持多个表示,可能同时支持。这种方法也是 Unix 文化的重要组成部分,并且一直延续到今天,允许通过图形和命令行界面操作许多应用程序。

    【讨论】:

      【解决方案2】:

      我建议使用MVC 的变体。在您的界面和后端创建抽象,以便您可以实现核心功能并覆盖每个设备的特定细节。这将允许您重用所有情况下通用的界面和后端部分,并根据连接的设备仅更改一部分。同时,您的 UI 与后端分离。

      【讨论】:

      • 您是否建议将配置表单/窗口保留在 UI 实现中或直接依赖于 COM 模块的另一个模块中?
      • @sawk 将 UI 部分与 UI 实现保持在一起,并将后端功能与后端的其余部分分开。这样您就可以在未来更改 UI 实现,而不必更改任何业务逻辑。
      • 谢谢。我实际上已经删除了动态加载部分,这听起来有点过头了,它使项目有点过于复杂。创建一个可以包含未来实现的所有内容的通用配置对象听起来也有点矫枉过正。然后我直接让 UI 依赖于 Core 和 COM 的实现。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多