我需要一些关于如何设计代码的建议。
我的系统有几个HW
(硬件),包含许多要使用的进程数据。 HW
反过来有几个Channel
也有很多数据。
此外,每个Plant
(PlantHW
和PlantChannel
都有一些独特的数据。这些数据并不多,并且它们的使用频率不如HW
和Channel
。在开始流程之前,用户选择要在流程中使用的Plant
,并且在运行期间不会更改。但是,用户可以取消该过程,并选择另一个Plant
。
我的问题是如何将HW
与PlantHW
和Channel
与PlantChannel
绑定在一起(方向无关紧要)?我希望它松散耦合,性能良好,易于理解。
我也不确定是否最好迭代所有HW
或PlantHW
。两种选择的利弊:
迭代PlantHW
Plant
HW
包含所有有趣的数据,感觉就像绕道而行PlantHW
。 迭代HW
HW
包含所有有趣的数据Plant
才能获得相应的PlantHW
/ PlantChannel
。我想知道如何设计这个。
修改
这6个类包含流程使用的设置和流程数据。从文件中读取它们(通过二进制序列化)然后启动程序。
System
- 常用系统设置Plant
- 该流程可以针对多个工厂运行。此类包含每个工厂唯一的数据。 HW
- 包含硬件设备的设置和过程数据。PlantHW
- 包含特定工厂的硬件设备的设置和过程数据。Channel
- 包含硬件设备中通道的设置和过程数据。PlantChannel
- 包含特定工厂硬件设备中通道的设置和过程数据。例如,我希望能够这样做(如果我选择迭代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
}
答案 0 :(得分:0)
对于你的问题,我们无法得到非常明确的想法,但根据我的理解,你需要分别拥有与硬件和渠道相关的工厂和工厂渠道。在我看来,你应该有一个工厂接口,你的硬件类应该通过接口注入植物实例。这使您可以灵活地在运行时更改任何实现。同样适用于Channel类。