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

我的系统有几个HW(硬件)包含大量数据供进程使用。HW反过来有几个Channel也有很多数据。
此外,每个Plant(PlantHW和PlantChannel) 都有一些独特的数据。这些在其中并没有太多的数据,而且它们的使用频率不如HW和Channel。流程中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
}