我只是想知道以下内容是否正常或是否违反了良好的编程习惯。
public class CircuitController // Library class to get/set controller settings.
{
...
private int numberOfAttachedSensors; // Number of sensors attached to the controller circuit. I have get/set properties.
private SensorSettings sensorSettings; // Class to hold the controller's sensor settings and get/set serial methods. I have get property.
...
public CircuitController(SerialPort serialPort, ...)
{
... // Set other fields.
sensorSettings = new SensorSettings(this); // Is this considered OK? I use it so that I can access the get property of numberOfAttachedSensors in the SensorSettings class.
...
}
}
public class SensorSettings // Class to hold the controller's sensor settings and get/set serial methods.
{
private CircuitController controller; // Set in constructor.
public SensorSettings(CircuitController controller) {this.controller = controller;}
public double[] ReturnSensorValues()
{
...
double[] resultArray = new double[this.controller.NumberOfSensorsAttachedGetProperty]; // Now I can "look up" to see the current number of sensors.
...
}
}
基本上,最通用的控制器设置(控制器名称,是打开/关闭等)都在CircuitController
类中,但更具体的设置在SensorSettings
类下“分组”。在SensorSettings
内我有时需要更高级别设置的状态,所以这是我的解决方案。我只是想知道这是否正常,或者是否有更优雅的解决方案。
感谢。
修改
我简化了一些事情。基本上这个控制电路有大约100个它理解的串行功能(在获取控制器的设置和设置它们之间混合)。手动输入命令字符串是一件痛苦的事情,所以我正在制作一个库类,它为我做了所有字符串命令汇编。但是,因为有100个设置及其各自的get / set函数,所以我不想将它们全部置于CircuitController类之下。控制器功能分为三个类别:传感器(多个)设置,输出设置和环境设置。所以我为每个创建了一个类来存储设置和相应的get / set方法,这些方法创建了正确的命令字符串。不幸的是,有一些交叉。例如,OutputSettings类下的方法主要使用自己的设置,但可能需要Environment类中的一个。希望有意义......
答案 0 :(得分:1)
我认为这样做没有任何问题,假设SensorSettings确实需要知道传感器的数量(在任何给定时间)。
我建议将CircuitController实例作为某种接口传递。例如,ControlSettings真的需要CircuitController,还是需要ISensorCountProvider接口或ICircuitController接口?
通过使用这样的接口,您不会强制这些类相互依赖。
答案 1 :(得分:1)
我会尝试重新思考你是如何建模你的课程/抽象的。 SensorSettings是否代表一个传感器或许多传感器的数据?
如果它适用于一个传感器,那么它不应该需要传感器的数量,并且任何跨多个传感器操作的逻辑(例如构建值数组)应该驻留在Controller类中(或者任何类都是模拟一系列传感器。)
如果SensorSettings用于建模传感器集合,那么传感器的数量可能应该传递给它的构造函数。
答案 2 :(得分:1)
如果我理解正确:
所以我不确定将SensorSettings方法分组到一个单独的类中是否有意义。有一个很好的理由让对象成为一对一的关系,但在这种情况下,我只是没有看到它。你能详细说明你为什么这样做吗?