【问题标题】:Where Do You Store Data in a GUI Application?您在 GUI 应用程序中的何处存储数据?
【发布时间】:2013-02-19 17:03:16
【问题描述】:

我一直听说您应该分离 GUI/数据/逻辑组件,例如 MVC 模式。 所以,我想知道:在 GUI 应用程序中,您实际上将数据存储在哪里?

这是一个示例(使用 C# 术语):
假设您有一个 GUI,它接受用户输入、进行一些分析并在表格中显示结果。
用户可以在一个窗口中进行多个分析,因此底部有一个 ListView 允许用户选择哪个分析当前显示(显示选定的项目)。

为了显示这一点,分析数据必须存储在某个地方。
我总是做以下两件事之一:

  1. 将所有数据放入单个对象中,并将其存储在 ListViewItem 的“Tag”属性中
  2. 扩展“ListViewItem”并添加我需要的任何属性。

但是,这意味着我将数据存储在 ListViewItem 中。 是否有更合适的位置来跟踪数据?

我可以将它作为私有成员添加到主窗体中,但这似乎是一回事。 我唯一能想到的另一件事是创建一些可以在需要时引用的全局类。

谢谢。

【问题讨论】:

  • 我是否正确假设,您只是在谈论临时存储 - 仅在应用程序运行时存在的数据并且没有任何持久性?
  • @tereško 是的,没错。

标签: c# model-view-controller design-patterns


【解决方案1】:

据我了解,您有一些 ListViewItems。每个 ListViewItem 都与您的业务逻辑对象相关联,在选择 ListViewItem 之一后,您希望对此业务对象进行一些操作。在类似的情况下,我通常会制作像

这样的数据对象
struct MyDataObject
{
   string Id;//very often data object need to have Identifcator, but not always
   //some fields
}

并添加到典型用户输入的数据对象构造函数中。

之后,我使业务逻辑层包含此数据对象的可用算法。对于简单的项目,这是一个静态类,如

static class MyDataObjectOperationService{
    void MakeSomething(MyDataObject myDataObject);
    object GetSomething(MyDataObject myDataObject);
    ...
}

对于通常是interface 的大型项目。另外我通常会创建一个数据层interface 来获取这个数据对象。例如

interface IMyDataObjectRepository{
  IList<MyDataObject> GetAll();  
  MyDataObject GetById(string id);
  //CRUD operations if it need
}

之后,我将数据对象的 ID 放入 ListViewItems 并在 ListViewItemClick 上获取选择 ID,然后使用数据层类按 ID 获取 DataObject,并使用业务逻辑层类进行一些操作。如果我需要保存 DataObject 更改或创建新的 DataObject,我使用数据层类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-08
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 2014-10-26
    • 2016-10-28
    • 1970-01-01
    相关资源
    最近更新 更多