【发布时间】:2011-07-01 15:17:39
【问题描述】:
我有一个关于如何构建与 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() 等。
通常首选哪种方法?我没有太多的工作经验,所以我不确定哪种方法是正确的处理方式。有时处理类中的所有内容更容易,但访问与之交互的对象可能具有挑战性。通常可以通过将相关对象设置为单例来实现,如上例中的数据库管理器。
【问题讨论】:
标签: c++ user-interface design-patterns wxwidgets