使用SNMP编写轮询网络设备的类

时间:2016-07-07 07:55:14

标签: c#

我必须编写一个类,它使用SNMP从网络设备请求信息。 首先要找出设备类型。 第二个 - 对设备的调查。

我想编写一个只需要IP地址的类,它将根据设备类型收集信息。

但我无法理解如何以最好的方式做到这一点。

我不喜欢这个,因为有两个SNMP类。

可能有一个简单的代码,它是如何在不同的应用程序中实现的。

现在我有类似这样的模板:

class NetworkDevice
{
    SNMP snmp;
    GenericDevice gd;
    ....
    public string GetObjectID() 
    {
         return snmp.Get(mib).ToString();
    }

    public void Scan()
    {
        string obj_id = GetObjectID();
        if(obj_id.StartsWith(".1.3.6.1.4.1.15")
            gd = new DeviceKind_1(ip_addr);
        if(obj_id.StartsWith(".1.3.6.1.4.1.181")
            gd = new DeviceKind_2(ip_addr);
        gd.Scan();
    }
}

class GenericDevice
{
    private SNMP snmp;
    private DeviceInfo Info;
    ....
    public void Scan()
    {

    }
}

class DeviceKind_1 : GenericDevice
{
    ....
    public void override Scan()
    {
        DeviceInfo.DEVICE_SPECIAL_PARAM_1 = snmp.Get(mib);
        ....
    }
    ....
}

class DeviceKind_2 : GenericDevice
{
    ....
    public void override Scan()
    {
        DeviceInfo.DEVICE_SPECIAL_PARAM_1 = snmp.Get(mib);
        ....
    }
    ....
}

*代码已编辑*

1 个答案:

答案 0 :(得分:0)

我看到了一些问题:

    正如您已经提到的,
  • snmp使用了两次。为什么不从GenericDevice继承NetworkDevice并从NetworkDevice中删除snmp变量?
  • 在GenericDevice中没有使用snmp(还有?)......在这种情况下,你可以将它从GenericDevice中删除,只保留在NetworkDevice中。否则,只保留在GenericDevice中并使其受到保护(或使用get / set方法)。

好处是您有多个类,因此必须很容易将所有通用功能保留在GenericDevice中,NetworkDevice中的所有网络特定功能,并为特定设备提供单独的类。

考虑使用(抽象)工厂模式生成正确的类。这是一种设计模式。