在dll中使用设置?
我正在写一个库来控制测量仪器并进行校准。该库将用于几个应用程序。在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
我觉得你的高层次的设计是有点瑕疵。所以我们来分解一些组件。
什么是图书馆?
库是一组(通常)预编译功能,可以由多个程序使用。库是简单的工具。例如,在您的代码中,您使用“字符串”并调用其“子字符串”方法。这是一个图书馆!它为你执行任务。请注意,只能通过为该方法提供具有不同参数的不同字符串来更改该方法的行为。图书馆不会改变。他们没有设置。
那么你应该为每个发射器类型做一个偏差参数?
这是一个解决方案。它将允许您更改每个程序的偏差。
但是,您需要为每个发射器类型创建一个变量,然后创建一个公共方法来更改它。这样你的图书馆知道使用什么偏差。每次你参考图书馆时,你必须在每一个程序中设置这些。
总之,这是太多的工作。图书馆应尽可能灵活。
还有其他想法吗?
我不确定你的图书馆在做什么。我看到它有一种“获得最大偏差”的方法。我假设这个值然后用于其他方法?
所以我们可以说这是你的方法:
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服务器或任何你想要的。你的图书馆不关心。
有用的文章设计
非常感谢您长时间的回答。我注意到我经常忘记非常基本的东西......保持事情简单和独立。我认为我的问题是试图编写主方法。另外拆分图书馆和用户界面之间的责任是另一个话题,我应该努力.....如果你有一些信息链接或文章对我来说真的很棒:)再次感谢 –
没问题。对不起,我不能给你更多的代码示例。我不太了解VB.net。我主要做C#,但我喜欢设计挑战。祝你的项目好运! – Clay07g
库所使用的程序员。设置由最终用户使用。由于这是一个库,因此请将您的设置放入变量中,并为使用该库的用户更改这些变量提供方法。我不确定你的意思是“100种不同类型”。我只看到一种类型,一个双精度(十进制数)。 – Clay07g
你不需要100个参数。创建一个类来保存配置值并传递它。该应用程序可以创建它并相应地设置值。 – Plutonix
感谢您的快速回答。有100个差异。类型我是指变送器类型。如果你能够举一个你的意思很好的例子。但是,如果我理解正确,你的意思是前例。使用Type1 = 0.2等变量/属性创建一个“MaxAllowedDeviationByType”模块,为最终用户提供更改选项?是否有办法永久修改(如果有)? –