C# 从UI窗口窗体中分离数据

C# 从UI窗口窗体中分离数据,c#,windows,forms,C#,Windows,Forms,我正在创建我的第一个Windows窗体项目,我正在寻找一些建议。现在,我有两种形式。一个从用户处获取产品信息,另一个将其显示在表中。我有一个包含产品集合的inventory类。我认为表单不应该实例化这个集合,它们应该只访问它。但是如果是这种情况,我应该在哪里实例化我的inventory类呢?一旦我这样做了,我如何将数据从这个类传递到我的表单?请注意,我不允许使用数据绑定 谢谢您可以在这里使用单例模式。阅读更多关于它的信息。 比如说 public class Inventory { private

我正在创建我的第一个Windows窗体项目,我正在寻找一些建议。现在,我有两种形式。一个从用户处获取产品信息,另一个将其显示在表中。我有一个包含产品集合的inventory类。我认为表单不应该实例化这个集合,它们应该只访问它。但是如果是这种情况,我应该在哪里实例化我的inventory类呢?一旦我这样做了,我如何将数据从这个类传递到我的表单?请注意,我不允许使用数据绑定


谢谢

您可以在这里使用单例模式。阅读更多关于它的信息。 比如说

public class Inventory
{
private Inventory instance;

private Inventory() {}
public Inventory Instance { get {
if(instance == null) instance = new Inventory();
return instance;
} 
}

//other code goes here
}


稍后,您的每个表单都可以访问此类的单个实例并使用它
Inventory.instance.someMethod()
您可以在这里使用单例模式。阅读更多关于它的信息。 比如说

public class Inventory
{
private Inventory instance;

private Inventory() {}
public Inventory Instance { get {
if(instance == null) instance = new Inventory();
return instance;
} 
}

//other code goes here
}


之后,您的每个表单都可以访问此类的单个实例并使用它
Inventory.instance.someMethod()

我觉得您好像在询问数据访问层(DAL)

这种类型的层可以是物理上(在不同的程序集中)或逻辑上(在相同的程序集中,但名称空间不同)构建到应用程序中的分离层,以从应用程序的其余部分提取数据源。该数据源可以是数据库、一些外部文本文件或简单的硬编码数据

考虑以下示例:

public class Product
{
    public int Id { get; set; }
}

public class ProductsDAL
{
    public static IEnumerable<Product> GetProducts()
    {
        return new List<Product>(new Product[]
            { 
                new Product() { Id = 1 },
                new Product() { Id = 2 }
            });
    }
}
公共类产品
{
公共int Id{get;set;}
}
公共类产品
{
公共静态IEnumerable GetProducts()
{
返回新列表(新产品[]
{ 
新产品(){Id=1},
新产品(){Id=2}
});
}
}
在上面的示例中,ProductsDAL类将处理数据从何处来的抽象,而对象调用它来获取该信息。大多数DAL类都有创建、读取、更新和删除它们用来访问的对象(通常称为CRUD)的方法

公共类MyForm:Form
{
私人产品;
私有void MyForm_加载(对象发送方,事件参数e)
{
this.products=ProductsDAL.GetProducts();
}
}
使用DAL类,您可以请求它从所使用的任何源检索产品,并将该信息加载到表单中。一旦你掌握了这些信息,你想用它做什么完全取决于你自己。您可以很好地遍历可用的产品,并将它们加载到组合框、网格中,无论您的场景需要什么


使用这种方法,您将能够替换数据源,例如我的示例中的硬编码列表,访问数据库和一些表以稍后提取数据。在这种情况下,您只需用数据库调用替换ProductsDAL.GetProducts方法中的硬编码列表。

听起来您好像在询问数据访问层(DAL)

这种类型的层可以是物理上(在不同的程序集中)或逻辑上(在相同的程序集中,但名称空间不同)构建到应用程序中的分离层,以从应用程序的其余部分提取数据源。该数据源可以是数据库、一些外部文本文件或简单的硬编码数据

考虑以下示例:

public class Product
{
    public int Id { get; set; }
}

public class ProductsDAL
{
    public static IEnumerable<Product> GetProducts()
    {
        return new List<Product>(new Product[]
            { 
                new Product() { Id = 1 },
                new Product() { Id = 2 }
            });
    }
}
公共类产品
{
公共int Id{get;set;}
}
公共类产品
{
公共静态IEnumerable GetProducts()
{
返回新列表(新产品[]
{ 
新产品(){Id=1},
新产品(){Id=2}
});
}
}
在上面的示例中,ProductsDAL类将处理数据从何处来的抽象,而对象调用它来获取该信息。大多数DAL类都有创建、读取、更新和删除它们用来访问的对象(通常称为CRUD)的方法

公共类MyForm:Form
{
私人产品;
私有void MyForm_加载(对象发送方,事件参数e)
{
this.products=ProductsDAL.GetProducts();
}
}
使用DAL类,您可以请求它从所使用的任何源检索产品,并将该信息加载到表单中。一旦你掌握了这些信息,你想用它做什么完全取决于你自己。您可以很好地遍历可用的产品,并将它们加载到组合框、网格中,无论您的场景需要什么


使用这种方法,您将能够替换数据源,例如我的示例中的硬编码列表,访问数据库和一些表以稍后提取数据。在这种情况下,您只需将ProductsDAL.GetProducts方法中的硬编码列表替换为数据库调用。

是否有任何方法不将全局状态引入我的程序?您可以按照下面的建议创建DAL层。是否有任何方法不将全局状态引入我的程序?您可以按照下面的建议进行操作并创建DAL层。