在多个类上拉伸对象的好方法

时间:2008-12-12 18:12:07

标签: collections mdi

我有一系列订单。我想打一次数据库,检索订单,存储它们,然后能够通过多种形式访问这个集合。我知道在asp.net中,您可以使用Application Object或Session Object之类的东西,但是如何在win form应用程序中执行此操作?我正在考虑创建一个静态集合,可以通过多个表单,类或任何地方访问。这听起来是否正确,甚至可行?

感谢

2 个答案:

答案 0 :(得分:1)

WebForms& amp;的基本区别WinForms是WinForms的有状态。换句话说,您可以确保加载的对象一旦可用,直到程序关闭。 WebForms也是如此,因为HTTP是无状态的,ASP.Net编织了许多“魔术”[ViewState,服务器会话,Cookie,隐藏字段等]来粘合Web应用程序的页面。

通过这种基本概念,可以很容易地在WinForms中使对象全局可用。使用Singleton / Static类并分配其成员。您可以随时说.Instance .. [在静态类/具有静态属性的类的情况下]从任何表单中检索值。

一个Gottcha是“线程安全”...又名..多个表单同时读取/写入静态属性。如果你可以照顾这个,休息是轻而易举的。

对于您的上述问题:

您可以拥有自己的Singleton Cache类来缓存记录。 Cache类将是一个自定义集合实现。您需要确保它是线程安全的[或确保您的应用程序仅加载一次并从那时开始读取] ...如果您想要对实体对象中反映的数据库进行更改,则可能需要考虑完整的ORM

CacheList.OrderCache[orderNo].Customer.Address.City = "Las Vegas";

class static CacheList { public static Cache OrderCache {get; internal set;}

}

public class Cache : CollectionBase where T : Entity { .....

}

答案 1 :(得分:0)

你应该有一些数据对象可以访问数据库,对吧?将其包装在CacheProxy类中,如果它没有本地副本,则会访问数据库。我听说你也可以use the System.Web cache in Winforms