【发布时间】:2018-04-06 14:18:15
【问题描述】:
我有一些设备类,如以下示例:
public class MoveSensor() {
public uint GetData() {
// Some logic here
}
}
public class TemperatureSensor {
public double GetData() {
// Some logic here
}
}
public class MultiSensorUnit() {
public MultiSensorData GetData() {
// Some logic here
}
}
public class MultiSensorData {
public int SomeSensor1Data { get; set; }
public byte SomeSensor2Data { get; set; }
public double SomeSensor3Data { get; set; }
}
但我有一个类可以定期从这些设备收集数据:
public class DataCollector() {
public void CollectData() {
// Here I want to collect a data from all devices
}
}
看来我应该使用接口:
public interface IDataRecievable {
[This is a problem place] GetData();
}
但我不能这样做,因为 GetData() 从不同的设备返回不同的类型。我需要一种设计模式来使 DataCollector 中的设备使用更加通用和通用。
【问题讨论】:
-
传感器中的逻辑是相同的还是不同的,我猜不同,接口似乎是一个值得的解决方案
-
我不太确定您对这里的期望。您可以定义一个通用接口,例如
IDataGetter<T>,然后使方法通用,例如T GetData();然后让每个班级以不同的方式修复T,例如public class TemperatureSensor : IDataGetter<double>。但这并没有真正的帮助,因为您的每个GetData方法仍将返回不同的类型,因此您需要将每个返回值强制转换为该类型才能使用它。 -
jmcilhinney,请在答案文本区域中输入您的代码,cmets 不适用于答案和代码 sn-ps。我只是看到设备具有相同的方法 GetData(),我觉得存在一种优化代码的方法,使其更具可扩展性和通用性。
-
您最终会如何处理数据(记录数据、显示给用户等)以及轮询的频率如何?
-
这个问题中没有足够的实现细节来提供一个合理的答案。它看起来像一堆返回不同类型的属性,您希望以某种方式将所有这些数据聚合到一个地方。我猜你可以去
dynamic。或者你可能需要更高级的东西。我不能只说一些看起来可以转换为属性的GetData方法。
标签: c# .net design-patterns architecture