如何组织库类结构

本文关键字:结构 何组织 | 更新日期: 2023-09-27 18:09:25

我有一个控制器电路,我可以通过串行端口通信,我想为它写一个类库。我认为调用方法要比反复硬编码冗长的字符串容易得多(而且可读性强得多)。无论如何,控制器带有预编程的约100个获取/设置功能,分为三类:传感器设置,输出设置和环境设置。这些函数用于获取或设置控制器的设置。我想知道"最好的"或"被接受的"班级组织是什么?

所有的功能属于同一个控制器,并使用相同的串行端口,所以我认为Controller将是顶级类。在这个类中,我设置了一个SerialPort实例,并使用实例string SendReceive(string commandString)创建了一个简单的发送/接收方法。

因为我真的不想在单个类中有~100个函数和属性,我尝试创建一些嵌套类(SensorSettings, OutputSettingsEnvironmentSettings)并将各自的函数放在其中。然而,当我尝试构建时,我收到一个编译错误,说明我试图从一个嵌套类中访问更高级别的非静态方法(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,而是提供一个整数。

你最终会得到很多小的代码文件,而不是一堆大的。此外,您可以使用特定于其功能的逻辑来定制每个命令。