使用dll中的设置?

Using settings in dll?

我正在编写一个库来控制测量仪器并进行校准。该库将在一些应用程序中使用。

有一次我需要设置最大值。允许的信号偏差,这取决于被校准的变送器。因此对于。前任。 Typter-typ 1 有 0.2%,typ 2 有 0.1%,typ 3 有 0.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

我觉得你的高层设计有点瑕疵。因此,让我们分解一些组件。

什么是图书馆?

库是一组(通常)预编译的函数,可以被多个程序使用。图书馆只是工具。例如,在您的代码中,您使用 "String" 并调用其 "Substring" 方法。那是图书馆!它为您执行任务。请注意,您只能通过为它提供具有不同参数的不同字符串来更改该方法的行为。图书馆不会改变。他们没有设置。

那么你应该为每个发射器类型制作一个偏差参数吗?

这是一个解决方案。它将允许您更改每个程序的偏差。

但是您需要为每种变送器类型创建一个变量,然后创建一个 public 方法来更改它。这样你的图书馆就知道要使用什么偏差。每次在您的每个程序中引用该库时,您都必须设置这些。

简而言之,这工作量太大了。图书馆应该尽可能灵活。

还有其他想法吗?

我不确定你的图书馆是做什么的。我看到它有一个 "Get the max deviation" 的方法。我假设此值随后用于其他方法?

假设这是你的方法:

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

这允许您的方法用于任何事情。

这个解决方案可能不是您所需要的,因为我不知道您的目标是什么。然而,关键是你的图书馆不应该关心给定变送器的最大偏差是多少。您的图书馆应该做的就是采用变送器类型和偏差,然后执行它需要执行的操作。

最大偏差应在最终用户使用的程序中确定。然后你可以使用一个设置文件,一个设置的window,一个JSON配置,一个XML配置,一个SQL服务器,或者任何你想要的。你的图书馆不在乎。

对设计有帮助的文章