代码之家  ›  专栏  ›  技术社区  ›  mouche

如何设计一个程序,使图形用户界面和程序逻辑分离

  •  0
  • mouche  · 技术社区  · 15 年前

    我开始用GTK+做我的第一个C程序。我在某种程度上学会了C,我和Pygtk一起工作过,所以我对这两者都有很好的理解。但是,我从来没有用C创建过GUI程序。虽然它起作用,但我最后的GUI程序有点混乱,因为程序逻辑与GUI混合在一起。我已经读过了,最好以一种分离的方式编写GUI和程序逻辑,这样如果您切换GUI库,就不会有太多痛苦。

    这是对的吗?假设我正在向可视列表中添加一个项。我是否有一个函数可以将该项添加到逻辑列表中,并在查看该列表然后更新GUI的函数中运行它?

    例如,

    void new_item_button_handler()
    {
      add_item_to_array() /* Code dealing with program logic*/
      /*
       * Code here to look at array and update visual list using GUI commands
       */
    }
    

    做这个的一般过程是什么?

    任何建议都将不胜感激!

    编辑:

    感谢您对MVC的建议。你能根据我给出的例子解释一下吗?有很多关于MVC的信息,我很难弄清楚它是如何应用到我的代码示例中的。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Matt K    15 年前

    我想你在找 Model-View-Controller 设计模式。

        2
  •  2
  •   clarson    15 年前

    传统上,这是用MVC模式解决的。但是,如果您不遵守规则,那么您将看到业务逻辑逐渐进入您的视图层。

    尽可能地设计您的包结构,以便所有东西都能整齐地放入模型、视图和控制器包中。确保您有良好的定义接口来在包之间共享数据。尽一切努力以一种方式设计包,即每个单独的包都是可测试的,并且大多数都可以使用,而不依赖于其他2个包。

    我也鼓励你们研究一下国际奥委会的模式。这将有助于将所有包连接在一起。当您需要模拟一些存根类来独立于其他2测试1包时,它也将在测试期间有所帮助。IOC是应用程序的“连接”,它允许您混合和匹配对象。