C# GUI应用程序中的数据存储在哪里?

C# GUI应用程序中的数据存储在哪里?,c#,model-view-controller,design-patterns,C#,Model View Controller,Design Patterns,我一直听说应该分离GUI/数据/逻辑组件,比如MVC模式。 所以,我想知道:在GUI应用程序中,数据实际上存储在哪里 下面是一个示例(使用C#术语): 假设您有一个GUI,它接受用户输入,进行一些分析,并在表格中显示结果。用户可以在一个窗口中进行多个分析,因此底部有一个列表视图,允许用户选择当前显示的分析(显示所选项) 为了显示这一点,分析数据必须存储在某个地方。我总是做两件事中的一件: 将所有数据放在一个对象中,并将其存储在ListViewItem的“Tag”属性中 扩展“ListViewIt

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

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

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

  • 将所有数据放在一个对象中,并将其存储在ListViewItem的“Tag”属性中
  • 扩展“ListViewItem”,只需添加我需要的任何属性
  • 但是,这意味着我将数据存储在ListViewItem中。 是否有更合适的位置来跟踪数据

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


    谢谢。

    据我所知,您有一些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 IMyDataObjectRepository{
      IList<MyDataObject> GetAll();  
      MyDataObject GetById(string id);
      //CRUD operations if it need
    }
    
    接口IMyDataObjectRepository{
    IList GetAll();
    MyDataObject GetById(字符串id);
    //CRUD操作(如果需要)
    }
    

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

    据我所知,您有一些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 IMyDataObjectRepository{
      IList<MyDataObject> GetAll();  
      MyDataObject GetById(string id);
      //CRUD operations if it need
    }
    
    接口IMyDataObjectRepository{
    IList GetAll();
    MyDataObject GetById(字符串id);
    //CRUD操作(如果需要)
    }
    

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

    我的假设正确吗,您所说的只是临时存储—仅在应用程序运行时存在的数据,而不存在任何持久性?@tereško是的,正确。我的假设正确吗,您所说的只是临时存储——只有在应用程序运行时才存在的数据,而没有持久性吗?@tereško是的,这是正确的。