如何在此方案中使用全局对象

时间:2013-03-10 19:57:52

标签: c# silverlight

我有一个程序可以在电视显示器上显示多个图表,这些图表每30秒左右循环一次。

我正在为显示的每个图表使用全局对象(因此对象包含一些条形,区域,线系列和一些方法)。我将它们全局化的原因是因为在执行初始sql查询之后(每天早上7点),图表的数据不会改变。我只需要在一天中循环浏览20个不同的图表。

在这种情况下使用本地对象会浪费吗?每次切换到新图表时,程序都必须创建一个新对象,并使用始终相同的数据点填充不同的系列。

在此方案中,如何避免使用全局对象?我问的原因是因为我读过你应该远离程序中的全局对象。

2 个答案:

答案 0 :(得分:1)

全局/本地对象 - 它实际上是一个封装问题(和范围问题 - 对象可以是应用程序全局或类全局 - 最佳实践是初始化和分配对象尽可能接近需要的位置 - 范围 - 和范围可以是应用程序(实际名称空间),类,方法甚至块(如使用{}或foreach {})。而不是创建大量应用程序全局成员,您应该将它们封装到类中并初始化这些类。首先,您不要混乱你的主循环,其次你有所有的优点,井类 - 子类,多态等等。只要你需要它们,保持对这些类的引用,就你的情况而言,据我所知,保持它们直到数据变化。这将是24小时?那又怎样?

在某些时候,无论如何都需要从主应用程序对象访问您的数据。如果您很好地封装了数据对象,即创建一些包含您需要显示的所有信息的类,您仍然需要在主应用程序循环中初始化这些类。

我认为没有必要每30秒重新创建一次对象。一旦你填充了类成员,他们就不会改变,除非当然改变或处置它们。此外,我似乎不太可能实际占用你的计算机内存,以至于每个图表在显示时都应该被处理掉,只是为了几秒钟或几分钟后重新创建数据,无论如何必须存储在内存中。 / p>

我理解您的应用程序应该如何工作的方式我将创建一个基础图类,创建尽可能多的图表子类,因为我有图表(如果它们在对象设计中彼此不同,否则只需在类上创建,并可能放置它们在List()中,在早上7点填写每个图表并循环遍历集合以显示它们。

答案 1 :(得分:0)

在大型项目中应避免使用全局对象,因为它们通常会影响系统的灵活性。

例如,当业务对象缓存24小时的结果时,这意味着程序中可能希望获取最新结果的其他部分最终将获得缓存值,或者必须重写它。

不使用类成员,而是使用实例成员可以避免此问题。 e.g。

public class ResultsCache
{
  public IEnumerable<Visitors> TotalVisitors {get; }
  public IEnumerable<Purchases> TotalPurchases {get; }
  public IEnumerable<Refunds> TotalRefunds {get; }

  public void FetchData() {
     //...
  }
}

var cache24hours = new ResultsCache();
var currentView = new RefundsView(cache24hours);