我需要一些有关如何设计代码的建议。
我的系统有几个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
}
最佳答案
嗯,关于您的问题还没有很清楚的主意,但是根据我的理解,您需要有一个工厂和工厂通道分别与一个硬件和一个通道关联。在我看来,您应该有一个工厂接口,并且您的硬件类应该通过接口获取注入到它的工厂实例。这使您可以灵活地甚至在运行时更改任何实现。同样适用于Channel类。
关于c# - 设计对象之间的耦合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14802306/