C# 通过回调方法收集统计信息

C# 通过回调方法收集统计信息,c#,oop,C#,Oop,我试图将“统计数据”从一个程序传递到另一个程序(我的第一个问题在这里) 为了通过统计,我首先需要收集数据。 我决定用一种方法实现中央存储,比如StatisticsStorage,方法是StatisticsStorage.jointstatistics(string groupName、string indicatorName、callback getValueMethod) 例如,温度计类应该如下所示(伪代码): 统计存储应定期调用所有指标的回调方法。 一旦收集了统计数据,我就可以通过各种方式传

我试图将“统计数据”从一个程序传递到另一个程序(我的第一个问题在这里) 为了通过统计,我首先需要收集数据。 我决定用一种方法实现中央存储,比如
StatisticsStorage
,方法是
StatisticsStorage.jointstatistics(string groupName、string indicatorName、callback getValueMethod)

例如,温度计类应该如下所示(伪代码):

统计存储应定期调用所有指标的回调方法。 一旦收集了统计数据,我就可以通过各种方式传递它

问题:

  • 你认为我的方法有什么问题吗
  • 如何在c#better上实现回调?(我对c#相当陌生)

    • 可能有很多方法可以达到你想要的结果。 我可能会发布一个WCF服务,可能托管在windows服务中,您可以连接并发布该服务的统计信息。这将保持系统关注点的良好分离,并可从其他系统等中重用。 我认为这取决于您希望达到的深度以及此场景中的需求


      再说一次,我可能只是过度分析了您要做的事情:)

      观察者模式可能是一种选择。特别是,观察者模式的典型C#实现使用INotifyPropertyChanged。这比调用具体的服务(如统计服务)更可取;温度计不应该知道它正在被用来收集统计数据,但它可能提供一种更通用的方式来通知它已经改变了。统计服务可以监听这些变化(或它想要监视的任何类型对象的变化),而不必使用知道它们在统计中的用途的特殊对象。温度计不会说“嘿,我的传感器数据更新了”。你们要用温度计检查当前温度。我想保证统计数据总是最新的。有人可能忘记调用observer方法。我想直接访问当前值的所需字段。“温度计不应该知道它被用来收集统计数据”——我不同意。温度计知道它被用来收集统计数据,这就是为什么温度计有显示,但没有蜂鸣器来发出温度变化的信号-温度计应用程序可以承载WCF服务,而另一个进程可以简单地调用它来查询当前值
      class Thermometer {
          Thermometer(string installationPlace) {
              StatisticsStorage.joinStatistics("temperature", installationPlace, this.getThermometerValue);
          }
          callback double getThermometerValue {
              return this.thermometerValue;
          }
          private double thermometerValue;
          //.....
      }