从UI窗口表单中分离数据

时间:2012-07-28 21:56:09

标签: c# windows forms

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

谢谢

2 个答案:

答案 0 :(得分:1)

您可以在此处使用单身人士模式。阅读更多相关信息here。 例如

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()

答案 1 :(得分:0)

听起来像是在询问数据访问层(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 }
            });
    }
}

在上面的示例中,ProductsDAL类将处理抽象,其中数据来自远离调用它的对象以获取该信息。大多数DAL类都有创建,读取,更新和删除它们用于访问的对象的方法(通常称为CRUD)。

public class MyForm : Form
{
    private IEnumerable<Product> products;

    private void MyForm_Load(object sender, EventArgs e)
    {
        this.products = ProductsDAL.GetProducts();
    }
}

使用DAL类,您可以请求它从其使用的任何来源检索产品,并将该信息加载到您的表单上。一旦掌握了这些信息,您想要做什么完全取决于您。您可以很好地遍历可用的产品,并将它们加载到组合框,网格中,无论您的场景需要什么。

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