2017-07-07 70 views
-1

我正在寫一個庫來控制測量儀器並進行校準。該庫將用於幾個應用程序。在dll中使用設置?

有一點我需要設置最大值。允許信號的偏差,這取決於正在校準的發射器。因此對於。恩。 Tansmitter-typ 1具有.2%,典型2具有.1%,而典型3具有.05%。

Private Function GetMaxDeviationAllowed(transmitterName as String) As Double 
     With transmitterName.Substring(0, 8) 
      If .Contains("050") Then 
       Return 0.2 
      ElseIf .Contains("100") Or .Contains("101") then 
       Return 0.15 
      ElseIf .Contains("200") or .Contains("201") then 
       Return 0.05 
      ElseIf .Contains("_PSP") 
       Return 0.2 
      Else 
       Return 0.2 'ASK: Use default tolerance or throw TypeNotSupported exception?' 
      End If 
     End With 
End Function 

這個程序將被沒有任何編程知識的人使用,我想給他們改變最大值的可能性。允許每個發射器類型的偏差而不改變源代碼。

我總是讀到使用庫中的設置並不是一個好主意,這是更好的讓UI處理設置,但我不能(至少我不知道如何)包裝這種方法,因爲如果我有100個不同的類型我需要一個有100個參數的方法(每個類型一個,如果每個都有不同的maxDeviationPermitted)。 此外,如果我使用的設置文件的DLL,afaik這將不會被使用,也不會被複制到應用輸出目錄...所以我有點在這裏輸了...

也許我只是頭腦簡單但如果不是很好,如果有人可以在這裏給我一些提示。

預先感謝您 RG

+2

庫所使用的程序員。設置由最終用戶使用。由於這是一個庫,因此請將您的設置放入變量中,併爲使用該庫的用戶更改這些變量提供方法。我不確定你的意思是「100種不同類型」。我只看到一種類型,一個雙精度(十進制數)。 – Clay07g

+0

你不需要100個參數。創建一個類來保存配置值並傳遞它。該應用程序可以創建它並相應地設置值。 – Plutonix

+0

感謝您的快速回答。有100個差異。類型我是指變送器類型。如果你能夠舉一個你的意思很好的例子。但是,如果我理解正確,你的意思是前例。使用Type1 = 0.2等變量/屬性創建一個「MaxAllowedDeviationByType」模塊,爲最終用戶提供更改選項?是否有辦法永久修改(如果有)? –

回答

2

我覺得你的高層次的設計是有點瑕疵。所以我們來分解一些組件。

什麼是圖書館?

庫是一組(通常)預編譯功能,可以由多個程序使用。庫是簡單的工具。例如,在您的代碼中,您使用「字符串」並調用其「子字符串」方法。這是一個圖書館!它爲你執行任務。請注意,只能通過爲該方法提供具有不同參數的不同字符串來更改該方法的行爲。圖書館不會改變。他們沒有設置。

那麼你應該爲每個發射器類型做一個偏差參數?

這是一個解決方案。它將允許您更改每個程序的偏差。

但是,您需要爲每個發射器類型創建一個變量,然後創建一個公共方法來更改它。這樣你的圖書館知道使用什麼偏差。每次你參考圖書館時,你必須在每一個程序中設置這些。

總之,這是太多的工作。圖書館應儘可能靈活。

還有其他想法嗎?

我不確定你的圖書館在做什麼。我看到它有一種「獲得最大偏差」的方法。我假設這個值然後用於其他方法?

所以我們可以說這是你的方法:

Private Function MakeCalibration(transmitterName as String) 

    Dim deviation as Double = GetMaxDeviationAllowed(transmitterName) 
    // Do more stuff 

End Function 

很簡單,但它有對「GetMaxDeviationAllowed」方法太多的依賴。除非另一種方法有效,否則此方法無法工作。這是不恰當的設計。

這裏是更好的東西:

Private Function MakeCalibration(transmitterName as String, maxDeviationAllowed as Double) 

    // Do more stuff using "maxDeviationAllowed" 

End Function 

這使得與任何使用你的方法。

此解決方案可能並不完全符合您的需求,因爲我不知道您的目標是什麼。然而,問題是你的圖書館不應該關心給定的發射器的最大偏差是。你所有的圖書館應該做的是採取發射器類型和偏差,並執行它需要執行的操作。

您的程序中最終偏差應該決定爲,最終用戶使用。然後你可以使用設置文件,設置窗口,JSON配置,XML配置,SQL服務器或任何你想要的。你的圖書館不關心。

有用的文章設計

+0

非常感謝您長時間的回答。我注意到我經常忘記非常基本的東西......保持事情簡單和獨立。我認爲我的問題是試圖編寫主方法。另外拆分圖書館和用戶界面之間的責任是另一個話題,我應該努力.....如果你有一些信息鏈接或文章對我來說真的很棒:)再次感謝 –

+0

沒問題。對不起,我不能給你更多的代碼示例。我不太瞭解VB.net。我主要做C#,但我喜歡設計挑戰。祝你的項目好運! – Clay07g