0

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

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

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

我该怎么做才能避免在这种情况下使用全局对象?我问的原因是因为我读过你应该远离程序中的全局对象。

4

2 回答 2

1

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

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

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

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

于 2013-03-10T20:48:30.007 回答
0

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

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

这个问题可以通过不使用类成员而使用实例成员来避免。例如

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);
于 2013-03-10T22:07:39.297 回答