程序逻辑应该放在GUI对象类内部还是外部?

5

我有一个关于如何在GUI对象中组织代码的问题。假设我有一个对话框,其中包含一个从数据库中获取的名称列表控件。用户可以编辑这些名称。逻辑应该驻留在该对话框类内部还是外部?为了说明我的意思,这里是一些伪代码,展示了在逻辑处理在对话框类外部时代码的结构:

NamesDialog : wxDialog
{
  Private:
    ..stuff..
  Public:
    ...
    SetNames(wxStringArray names);
    wxStringArray GetNames();
    ..stuff..
}

因此,该类的用户将执行以下操作:

wxStringArray names = DatabaseManager::Get()->GetNames();
names.Sort();
NamesDialogObject.SetNames(names);
NamesDialogObject.ShowModal();
wxStringArray modified_names = NamesDialogObject.GetNames();
AddToDatabase(modified_names); //or something like this.

另一方面,数据库逻辑可以存储在NamesDialog类本身中。在show方法中,我可以查询名称的数据库,并且随着用户与控件(在此情况下为列表控件)交互,数据库可以从事件处理程序进行更新。因此,NamesDialog类仅具有Show()方法,因为没有必要使用SetNames或GetNames()等方法。
通常哪种方法更受欢迎?我没有很多工作经验,所以不确定处理它的正确方式。有时在类中处理所有内容会更容易,但是访问其交互对象可能具有挑战性。通常可以通过使相关对象成为单例对象来完成,例如上面示例中的数据库管理器。
3个回答

3

试试使用MVC


2
有几种相似的方法可以设计GUI程序: 好了,最后一个是个玩笑。
前两种是设计GUI程序的首选方式。两者都很好,所以无论你选择哪种,都不会出错。 然后,您应该充分单元测试您的逻辑,这些逻辑应该在Presenter和Model中。

0

一般来说,你倾向于将实际工作与GUI本身解耦。这样做有两个原因:

  • 通过解耦操作,您可以重复使用它们。多个控件可以重复使用相同的操作(例如保存:CTRL + S,文件>保存,文件>另存为),并且还可以通过命令行/脚本触发。
  • GUI应该是响应式的,您不希望它因为正在与数据库传输数据而被卡住,因此您希望在另一个线程中执行“操作”。

编程的一般方式是通过消息传递/事件处理。GUI发送和接收事件/消息,实际工作由一个(或多个)后台线程执行。

典型的模型是MVC(模型-视图-控制器),但还有其他合适的替代方案,所以不要固守于此。


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