因此,我正在编写一个社区应用程序,帮助用户找到兼容的PC组件(或新的PC组件)。到目前为止,我已经实现了一些类 - 用于保存当前所选组件的配置,例如处理器,主板,GraphicsCard以及这些类本身。例如,处理器和主板具有Enum SocketType = {LGA775,LGA1155 ...}的实例。现在,我可以考虑一些实现来检查兼容性:
单个兼容性类,包含处理特定组件兼容性的函数。例如: isProcessorCompatible(配置配置,处理器proc)处理处理器和当前配置之间的任何不兼容性。我认为这是一个相当差的实现,因为某些区域需要编码两次(例如,处理器和主板的SocketTypes)。
将SocketType枚举扩展为可以检查兼容性的类。如何处理LGA1155处理器与> 1.5V RAM之间的电压不兼容?
每次都有一个规则清单。在完成规则之前将组件添加到配置中,如果它不兼容则将其删除。我认为这会产生一种大规模的方法而且非常混乱,我不喜欢它。
我真正想问的是,之前是否有这三种建议的替代方案,以至于它并不凌乱,不会成为一种绝对痛苦的维护,并且实际上适用于这样的价值观作为电压?
答案 0 :(得分:0)
我的观点是: 我会创建类似HardwareConfigurationManager类的东西 有一个方法
bool HardwareConfigurationManager.IsHardwareCompatible(IHardwarePart part1, IHardwarePart part2)
接受任何硬件部分并在db中找到答案,您可以通过多种方式进行组织:)
答案 1 :(得分:0)
在这种情况下,你真的想研究和实施开放封闭原则。 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);
在哪里(或类似的东西)
public class HardwareBasket : List<IHardwarePart>