PC组件实现(特别是兼容性)

本文关键字:兼容性 特别是 组件 实现 PC | 更新日期: 2023-09-27 18:18:28

所以,我正在为一个社区编写一个应用程序,帮助用户找到兼容的PC组件(或新的PC组件)。到目前为止,我已经实现了一些类——用于保存当前选择的组件的配置,如Processor、Motherboard、GraphicsCard和那些类本身。例如,处理器和主板有一个枚举SocketType = {LGA775, LGA1155…}的实例。现在,我可以想到几个检查兼容性的实现:

  1. 单个兼容性类,其中包含处理特定组件兼容性的函数。例如:isProcessorCompatible(配置配置,处理器进程)处理处理器与当前配置之间的任何不兼容。我认为这是一个相当糟糕的实现,因为某些区域需要编码两次(例如处理器和主板的SocketTypes)。

  2. 将SocketType枚举扩展为一个可以检查兼容性的类。LGA1155处理器和>1.5V RAM之间的电压不兼容怎么办?

  3. 只要有一个大的规则列表,程序每次都要经过。在执行规则之前将组件添加到Configuration中,如果它不兼容就删除它。我认为这将产生一个庞大的方法,而且相当混乱,我不喜欢它。

我真正想问的是,有没有一种替代前面这三个建议的方法,这样它就不会混乱,不会成为维护的绝对痛苦,并且实际上适用于电压之类的值?

PC组件实现(特别是兼容性)

这只是我的观点:我会创建类似于HardwareConfigurationManager类的东西它有一个方法

bool HardwareConfigurationManager.IsHardwareCompatible(IHardwarePart part1, IHardwarePart part2)

接受任何硬件部件,并在db中找到答案,您可以通过多种方式组织:)

在这种情况下,您确实需要研究和实现开闭原则。http://en.wikipedia.org/wiki/Open/closed_principle

基本上你希望你的代码是可扩展的,添加新的硬件不会中断,或者需要大量的代码更改到10个类,只是为了与你的当前版本兼容。

您可以通过基于XML的配置或数据库以及一些非常聪明的兼容性匹配代码来实现这一点。

关于Elasteps答案的扩展。使用IHardwarePart .

HardwareBasket hardwareBasket = new HardwareBasket();
hardwareBasket.Add(part1)
hardwareBasket.Add(part2)
hardwareBasket.Add(part3)
hardwareBasket.Add(part4)
bool compatible SystemConfiguration.IsHardwareBasketCompatible(hardwareBasket);
// better yet make the IsHardwareBasketCompatible return something like a 
// validation class that returns a yes/no for each item in HardwareBasket.
// this way you can report to the user that Nvidia 560Ti card is not compatible
// with their system but the other 3 components are.
CompatibilityResult compatible SystemConfiguration.IsHardwareBasketCompatible(hardwareBasket);

Where(或类似)

public class HardwareBasket : List<IHardwarePart>