这是我第一次与我一起创建一个完整的库类。
我有一个控制器电路,我可以通过串口与之通信,我想为它编写一个类库。我认为调用一个方法(并且更可读)比重复硬编码冗长的字符串要容易得多。无论如何,控制器预编程了大约100个获取/设置功能,分为三类:传感器设置,输出设置和环境设置。这些功能用于获取或设置控制器的设置。我想知道“最佳”或“被接受”的班级组织是什么?
所有函数都属于同一个控制器并使用相同的串口,因此我认为Controller
将是顶级类。在这个类中,我设置了一个SerialPort
实例,并使用实例创建了一个简单的发送/接收方法:string SendReceive(string commandString)
。
因为我真的不想在单个类中拥有~100个函数和属性,所以我尝试创建一些嵌套类(SensorSettings
,OutputSettings
和EnvironmentSettings
)并放置其中的各自功能。但是,当我尝试构建时,我收到一个编译错误,指出我试图从其中一个嵌套类中访问更高级别的非静态方法(SendReceive(string commandString)
)。
每种方法都有一个唯一且可变的发送/接收命令,因此我将在方法中创建命令字符串,调用SendReceive
,并处理返回的命令。有没有办法做到这一点?
我想使用属性向下工作以获取/设置各种设置。例如......
controllerInstance.SensorSettingsProperty.Units; // Units in use.
...或
controllerInstance.OutputSettingsProperty.GetOutput(sensor1); // Get sensor 1 output.
...但所有这些都需要使用相同的串口和SendRecieve
。
我为非常长的帖子道歉。非常感谢任何帮助。
谢谢!
答案 0 :(得分:0)
听起来你需要为每个命令创建对象,然后使用你的控制器发送命令。
示例:
public class GetSensorReadingCommand
{
public GetSensorReadingCommand(Sensor sensor, SerialController controller)
{
// Set up command
}
public int Execute()
{
// Call controller.SendReceive with whatever, get or send stuff
}
}
然后,每次想要执行某项功能时,您只需创建新对象。
SerialController controller = new SerialController(somePortNumber);
GetSensorReadingCommand command = new GetSensorReadingCommand(Sensor.Sensor10, controller);
int reading = command.Execute();
对于您可以发送的每个命令,您将遵循这样的模式。如果它不是编译类型传感器编号,而不是使用枚举,则提供整数。
你最终会得到很多小代码文件,而不是一堆大代码文件。此外,您可以使用特定于其功能的逻辑来定制每个命令。