如何在此场景中绕过使用全局对象

本文关键字:全局 对象 | 更新日期: 2023-09-27 18:03:18

我有一个程序,它在电视显示器上显示几个图表,这些图表大约每30秒循环一次。

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

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

我能做些什么来避免在这种情况下使用全局对象?我问这个问题的原因是因为我读到你应该在你的程序中远离全局对象。

如何在此场景中绕过使用全局对象

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

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

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

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

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

例如,当业务对象缓存结果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);