我需要一些关于如何设计我的代码的建议。
我的系统有几个HW
(硬件)包含大量数据供进程使用。HW
反过来有几个Channel
也有很多数据。
此外,每个Plant
(PlantHW
和PlantChannel
) 都有一些独特的数据。这些在其中并没有太多的数据,而且它们的使用频率不如HW
和Channel
。流程中Plant
使用的内容由用户在流程启动之前选择,在运行期间不会更改。但用户可以取消该过程,并选择另一个Plant
.
我的问题是如何以一种好的方式绑定和HW
绑定(PlantHW
方向无关紧要)?我希望它是松耦合的,具有良好的性能,并且易于理解。Channel
PlantChannel
我也不确定是否最好迭代所有HW
or 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
}