我正在寻找以下问题的建议。
我有许多类,它们是许多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
填充哪些属性。
现在,我想我的问题是 - 这是或者这是一个很好的实现我想要实现的目标吗?我缺少哪些明显的明显改进?所有的代码都有效,所以从适用性的角度来看它绝对没问题,但有更好更清洁的实现 - 在这种情况下工厂(或任何其他)模式会帮助我吗?
提前致谢, ķ