通用设计模式实现建议

4

我希望你能给出一些关于以下问题的建议。

我有许多类,它们是许多USB硬件的包装器 - 例如总线可编程电源供应器、标签打印机、数据采集模块、USB串行转换器等。

每个类都实现了一个名为IHardwareDevice的接口,定义如下...

public interface IHardwareDevice
{
    string VID { get; }
    string PID { get; }
}

// Example IHardwareDevice implementation
public class PowerSupply : IHardwareDevice
{
    public string VID
    {
        get { return "0123"; }
    }

    public string PID
    {
        get { return "3210"; }
    }
}

上述接口允许每个USB设备指定自己的供应商和产品ID。

我还有一个名为DeviceManager的静态类,它使用SetupDixxx设备安装功能来检测上述任何一个USB设备是否存在。该类还具有启用或禁用指定设备的能力。

该类的简要概述如下...

public static class DeviceManager
{
    public static T Find<T>() where T : IHardwareDevice, new()
    {
        // Uses the SetupDixxx calls to find a VID and PID match
        // returns new T() or default(T) depending on whether match was found
    }

    public static bool Enable(IHardwareDevice obj)
    {
        // ...
    }

    public static bool Disable(IHardwareDevice obj)
    {
        // ...
    }
}

我曾考虑使用HardwareDeviceAttribute来装饰每个类(该属性将包含VID和PID),但我决定不这样做。此外,未来我希望USB设备类的每一个都能够拥有自己独特的属性,例如用于USB串口转换器的PortName或用于HID设备的PathName(以允许对其进行CreateFile、ReadFile和WriteFile访问等),所有这些属性都应从读取到的设备注册表分支中的值进行填充(再次使用SetupDixxx函数调用)。我曾考虑扩展IHardwareDevice接口以包含一个InitializeDevice方法,该方法由DeviceManager调用,但这将需要访问硬件类中的多个非托管结构,这似乎是不可取的。另一种选择是装饰USB设备的自定义属性,指示哪些属性将由DeviceManager填充。
现在,我的问题是 - 这是否是我想要实现的好方法?是否有任何明显的改进措施我忽略了?所有代码都有效,所以从适用性的角度来看,它绝对没问题,但是否有更好、更清晰的实现方法 - 例如工厂(或其他)模式是否能够帮助我在这种情况下?
提前感谢, K

是的,我相信工厂模式可以帮助您。如果您发现自己正在处理多组对象的对象创建活动,请考虑使用抽象工厂甚至 DI 容器。 - neontapir
1个回答

1

我不是很确定,但我认为建造者模式可能对你有所帮助。如果你通过建造者构建对象,那么你可以只使用所需数量的属性进行初始化,同时保留其他属性不变。维基链接


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接