我正在编写一个库来控制测量仪器并进行校准。该库将在几个应用程序中使用。
有一次我需要设置最大值。允许信号的偏差,取决于被校准的发射机。因此对于。恩。 Tansmitter-typ 1有0.2%,typ 2有.1%,typ 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将不会被使用,也不会被复制到app输出目录...所以我在这里有点迷失...
也许我只是心胸狭隘,但如果不是,如果有人能在这里给我一些暗示会很好。
提前谢谢你 RG
答案 0 :(得分:2)
我认为你的高级设计有点缺陷。因此,让我们分解一些组件。
什么是图书馆?
库是一组(通常)预编译函数,可供多个程序使用。图书馆只是工具。例如,在您的代码中,您使用" String"并调用它的"子串"方法。那是一个图书馆!它为您执行任务。请注意,您只能通过为其提供具有不同参数的不同字符串来更改该方法的行为。图书馆不会改变。他们没有设置。
那么您应该为每个发射器类型制作一个偏差参数吗?
这是一个解决方案。它允许您更改每个程序的偏差。
但是你需要为每个发射器类型创建一个变量,然后制作一个公共方法来改变它。这样你的图书馆知道要使用什么偏差。在每个程序中,每次引用库时都必须设置这些。
简而言之,这是太多的工作。图书馆应尽可能灵活。
还有其他想法吗?
我不确定你的图书馆做了什么。我看到它有一个方法来获得最大偏差"。我假设这个值然后用于其他方法?
所以,让我们说这是你的方法:
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服务器或任何您想要的内容。你的图书馆并不在乎。
有用的设计文章