在GUI应用程序中存储数据的位置?

时间:2013-02-19 17:03:16

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

我一直听说你应该分开GUI / Data / Logic组件,比如MVC模式。 所以,我想知道:在GUI应用程序中,您实际存储数据的位置是什么?

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

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

  1. 将所有数据放入单个对象并将其存储在ListViewItem的“Tag”属性中
  2. 扩展“ListViewItem”,只需添加我需要的任何属性。
  3. 但是,这意味着我将数据存储在ListViewItem中。 是否有更适合跟踪数据的地方?

    我可以将它作为私有成员添加到主窗体中,但这看起来是一样的。 我能想到的唯一另一件事就是制作一些我可以随时参考的全球课程。

    感谢。

1 个答案:

答案 0 :(得分:1)

据我所知,你有一些ListViewItems。每个ListViewItem都与您的业务逻辑对象相关联,并且在选择ListViewItem之一后,您需要对此buisness对象进行一些操作。在类似的情况下,我通常将数据对象设为

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
}

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