C#库类结构问题

时间:2011-09-20 21:09:33

标签: c# class organization

这是我第一次与我一起创建一个完整的库类。

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

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

因为我真的不想在单个类中拥有~100个函数和属性,所以我尝试创建一些嵌套类(SensorSettingsOutputSettingsEnvironmentSettings)并放置其中的各自功能。但是,当我尝试构建时,我收到一个编译错误,指出我试图从其中一个嵌套类中访问更高级别的非静态方法(SendReceive(string commandString))。

每种方法都有一个唯一且可变的发送/接收命令,因此我将在方法中创建命令字符串,调用SendReceive,并处理返回的命令。有没有办法做到这一点?

我想使用属性向下工作以获取/设置各种设置。例如......

controllerInstance.SensorSettingsProperty.Units; // Units in use.

...或

controllerInstance.OutputSettingsProperty.GetOutput(sensor1); // Get sensor 1 output.

...但所有这些都需要使用相同的串口和SendRecieve

我为非常长的帖子道歉。非常感谢任何帮助。

谢谢!

1 个答案:

答案 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();

对于您可以发送的每个命令,您将遵循这样的模式。如果它不是编译类型传感器编号,而不是使用枚举,则提供整数。

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