如何组织库类结构
本文关键字:结构 何组织 | 更新日期: 2023-09-27 18:09:25
我有一个控制器电路,我可以通过串行端口通信,我想为它写一个类库。我认为调用方法要比反复硬编码冗长的字符串容易得多(而且可读性强得多)。无论如何,控制器带有预编程的约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
。
听起来您需要为每个命令创建对象,然后使用控制器发送命令。
的例子:
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();
对于您可以发送的每个命令,您都将遵循这样的模式。如果它不是已知的编译类型传感器编号,则不使用enum,而是提供一个整数。
你最终会得到很多小的代码文件,而不是一堆大的。此外,您可以使用特定于其功能的逻辑来定制每个命令。