加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 通用设计模式实现建议

发布时间:2020-12-15 21:22:31 所属栏目:百科 来源:网络整理
导读:我正在寻找以下问题的一些建议. 我有许多类,它们是许多USB硬件的包装器 – 例如总线可编程电源,标签打印机,数据采集模块,USB转串口转换器等. 这些类中的每一个都实现了一个接口IHardwareDevice,定义如下…… public interface IHardwareDevice{ string VID {
我正在寻找以下问题的一些建议.

我有许多类,它们是许多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接口以包含一个可由DeviceManager调用的InitializeDevice方法,但这需要访问硬件类中的许多非托管结构,这似乎是不可取的.另一种选择是装饰USB设备的自定义属性,指示哪些将由DeviceManager填充.

现在,我想我的问题是 – 这是或者这是一个很好的实现我想要实现的目标?我缺少哪些明显的明显改进?所有的代码都可以工作,所以从适用性的角度来看它绝对没问题,但有更好更清洁的实现 – 在这种情况下工厂(或任何其他)模式会帮助我吗?

提前致谢,
?

解决方法

我不是很确定,但我认为构建模式可能对你有所帮助.如果通过构建器构造对象,则可以使用所需数量的属性进行初始化,同时保持其他属性不变. wiki link

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读