2016-07-07 31 views
-1

我必須編寫一個類,它使用SNMP從網絡設備請求信息。 首先要找出設備類型。 第二個 - 設備的民意調查。使用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); 
     .... 
    } 
    .... 
} 

*代碼被編輯*

+0

我會推薦使用一個解決方案,如SharpSNMP庫 – Alex

+0

我在SNMP類中使用它。 SNMP類是我的一個接口。 – txid

回答

0

我看到了一些問題:

  • SNMP使用了兩次,因爲你已經提到的。爲什麼不從GenericDevice繼承NetworkDevice並從NetworkDevice中刪除snmp變量?
  • snmp在GenericDevice(尚未?)中沒有使用...在這種情況下,您可以從GenericDevice中將其刪除,並只保留在NetworkDevice中。否則,只保留在GenericDevice中並使其保護(或使用get/set方法)。

好東西是你有多個類,所以它必須很容易保留GenericDevice中的所有通用功能,NetworkDevice中的所有網絡特定功能以及具有特定設備的單獨類。

考慮使用(抽象)工廠模式來生成正確的類。這是一種設計模式。

+0

哦!這是我的錯誤。在GenericDevice中沒有使用Snmp。 DeviceKind_1和DeviceKind_2。在GenericDevice中必須是專用SNMP snmp; – txid