2

我需要一些关于如何设计我的代码的建议。

在此处输入图像描述

我的系统有几个HW(硬件)包含大量数据供进程使用。HW反过来有几个Channel也有很多数据。

此外,每个Plant(PlantHWPlantChannel) 都有一些独特的数据。这些在其中并没有太多的数据,而且它们的使用频率不如HWChannel。流程中Plant使用的内容由用户在流程启动之前选择,在运行期间不会更改。但用户可以取消该过程,并选择另一个Plant.

我的问题是如何以一种好的方式绑定和HW绑定(PlantHW方向无关紧要)?我希望它是松耦合的,具有良好的性能,并且易于理解。ChannelPlantChannel

我也不确定是否最好迭代所有HWor PlantHW。两种方案的优缺点:

迭代PlantHW

  • 优点:最合乎逻辑的过程是针对特定的Plant
  • 缺点:它HW包含了所有有趣的数据,感觉像是在绕道而行PlantHW

迭代HW

  • 优点:HW包含所有有趣的数据
  • 缺点:不合逻辑
  • 缺点:进程必须知道选中Plant的才能获得相应的PlantHW/ PlantChannel

我想要关于如何设计这个的建议。

编辑

这 6 个类包含过程使用的设置和过程数据。它们从文件中读取(通过二进制序列化),然后启动程序。

  • System- 常用系统设置
  • Plant - 该过程可以针对多个工厂运行。此类包含每个工厂唯一的数据。
  • HW - 包含硬件设备的设置和过程数据。
  • PlantHW - 包含特定工厂硬件设备的设置和过程数据。
  • Channel - 包含硬件设备中通道的设置和过程数据。
  • PlantChannel - 包含特定工厂硬件设备中通道的设置和过程数据。

例如,我希望能够做到这一点(如果我选择 iterate 的替代方案HW):

void DoOperationsOnAChannel(HW hw, Plant selectedPlant)
{
   // plantHw data is not often used
   // var plantHw = GetPlantHW(hw, selectedPlant); 

   foreach(var channel in hw.Channels)
     //Do operations based on hw, plantHw and channel
}

或者(如果选择迭代的替代方案PlantHW

void DoOperationsOnAChannel(PlantHW plantHw)
{
   var hw = GetHW(plantHw);
   foreach(var channel in plantHw.Channels)
     //Do operations based on hw, plantHw and channel
}
4

1 回答 1

0

嗯,对你的问题不太清楚,但根据我的理解,你需要有一个工厂和工厂通道,分别与硬件和通道相关联。在我看来,您应该有一个植物接口,并且您的硬件类应该通过接口将植物实例注入它。这使您即使在运行时也可以灵活地更改任何实现。同样适用于偶数通道类。

于 2013-06-23T17:22:29.987 回答