我正在创建我的第一个Windows窗体项目,并且正在寻找一些建议。现在,我有两种形式。一个从用户获取产品信息,另一个将其显示在表格中。我有一个库存类,其中包含一系列产品。我想象的形式不应该实例化这个集合,他们应该只能访问它。但是,如果是这种情况,我在哪里实例化我的库存类?一旦我这样做了,我如何将这个课程的数据传递给我的表单呢?请注意,我不允许使用数据绑定。从UI窗口窗体中分离数据
谢谢
我正在创建我的第一个Windows窗体项目,并且正在寻找一些建议。现在,我有两种形式。一个从用户获取产品信息,另一个将其显示在表格中。我有一个库存类,其中包含一系列产品。我想象的形式不应该实例化这个集合,他们应该只能访问它。但是,如果是这种情况,我在哪里实例化我的库存类?一旦我这样做了,我如何将这个课程的数据传递给我的表单呢?请注意,我不允许使用数据绑定。从UI窗口窗体中分离数据
谢谢
你可以在这里使用singleton模式。详细了解它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()
这听起来好像你问一个数据访问层(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方法中的硬编码列表。
是否有任何方法不会引入全局状态到我的程序中? – Nick 2012-07-28 22:31:04
您可以按照以下建议创建DAL图层。 – 2012-07-29 11:05:53