为一个应用程序开发多个用户界面

3
我希望开发一个应用程序,它具有图形用户界面,并可以使用不同的小部件工具包进行开发。例如,我想为同一应用程序使用Qt、GTK+或甚至ncurses作为用户界面的构建块。此外,用户可以在下次启动应用程序时选择使用哪个GUI实现,而无需先重新编译它。我想知道在实现这个设计中可能使用了哪些设计策略和设计模式?
2个回答

3

用于多个 GUI 的经典设计模式是 MVC

你有一个模型(应用程序数据和规则),控制器(每个视图一个)- 这些控制 UI 交互并在 UI(视图)和模型之间进行中介。

您可以让不同的视图与控制器对话 - 一个视图可以是 Qt,另一个可以是 GTK+ 或甚至是控制台应用程序。


0

你为什么想要那个?

每个工具包都有自己的优点和缺点。如果你想设计一个能够与它们所有工作的东西,你将受到所有缺点的累积限制,并且得不到任何优点。
例如,如果你正在使用Qt,那么你将无法使用QT的信号和插槽。这将使编写GUI和与之交互非常痛苦。你基本上需要在已经是包装器层的东西周围编写整个包装器层(到本机API)。

我看不出用户为什么会关心选择Qt或GTK+或ncourses之间的区别。只需选择一件事并坚持下去。


我同意。虽然从理论上讲,这种方法听起来不错,但在实践中很少能产生好的结果。我认为这种与UI无关的东西不应该尝试使用MVC。相反,他们应该提供M部分(模型),并让UI处理所有与接口相关的事情,以不降低他们利用GUI工具包的强大优势的能力。例如,这就是libpurple和Pidgin遵循的方式(据我所知)。 - user319799
shoosh:我认为你说得很实际。我试图制作一个包装器(抽象小部件/容器),但这引起了新的问题。不久之后,通过使用包装器来开发新的自定义小部件变得更加复杂和困难。不同的主要开发语言(C - C ++),不同工具包的属性和信号系统的差异迫使我将更多的工具包特定细节推入包装器中,这使得开发阶段更加困难。 - Deniz
doublep: 我认为最简单的方法是将业务逻辑与呈现分开。这可以采用库或组件的方法,但您可以使用相同的库/组件编写新的GUI。UI可以将所需功能委托给另一层。 - Deniz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接