我不知道标题是否真正描述了我想要达到的目标,所以请随意将其编辑为更合适/适当的标题,以便明白这一点。
我的情况是我需要能够检索数值的字符串表示,反之亦然 - 得到字符串值的数字表示。
我在helper类中有两个共享函数,如下所示:
Shared Function GetStringRepresentation(value as Integer) as String
Select Case value
Case 1
Return "One"
Case 2
Return "Two"
End Select
End Function
Shared Function GetNumericRepresentation(value as String) as Integer
Select Case value
Case "One"
Return 1
Case "Two"
Return 2
End Select
End Function
现在,在一个单独的类中,我有以下属性:
Private _stringRep As String
Public Property StringRep As String
Get
Return _stringRep
End Get
Set(value As String)
_intRep = HelperClass.GetNumericRepresentation(value)
End Set
End Property
Private _numericRep As Integer
Private Property NumericRep As Integer
Get
Return _numericRep
End Get
Set(value As Integer)
_stringRep = HelperClass.GetStringRepresentation(value)
End Set
End Property
目前这是通过默默无闻的安全。请注意,由于我无法使用多字枚举(即"THIS IS NUMBER ONE", "THIS IS NUMBER TWO"
),因此我避免使用枚举。
关于如何在遵循DRY原则的同时解决这个问题的任何建议?我将枚举留给最后一个选项,enum之前的选项是SQL数据查询(因为信息来自SQL数据库);但我想尽量避免这种情况。
编辑 - 由于关于在数据库中使用代码表的两条评论,我添加了此内容,第二条是没有任何安全性。
请理解,我在数据库的代码表中有这些信息,如果添加了任何新值,这些信息将被拉入应用程序启动时的本地内存缓存中。我通过字符串值或整数值,并输入我想要的返回类型,它将返回上述返回。但是,我问在启动时是否有办法将其直接放入应用程序,并且与将数据写入本地内存缓存相比,仍然具有反编译器的某种程度的安全性。 此外,我放入的示例与我当前的代码完全无关 - 结构类似于单个对象,但代码是6-7个对象之间的交叉通信,然后通过业务层和数据访问层,在传递到数据库/从数据库中检索之前 - 将一个表连接到许多参考表(因此,我上面提到的关于安全性的评论通过默默无闻)。
我希望这能澄清我的目标。
答案 0 :(得分:1)
首先,我会将所有内容存储在字典中,这样您就不会重复了。
Private _numberString As New Dictionary(Of Integer, String)
_numberString.Add(1, "One")
_numberString.Add(2, "Two")
Shared Function GetStringRepresentation(ByVal value As Integer) As String
If _numberString.ContainsKey(value) Then
Return _numberString(value)
End If
Return ""
End Function
Shared Function GetNumericRepresentation(ByVal value As String) As Integer
For Each k As Integer In _numberString.Keys
If _numberString(k) = value Then
Return k
End If
Next
Return 0
End Function
然后我只存储一个值,即整数。
Private _numericRep As Integer
Public Property StringRep() As String
Get
Return Helperclass.GetStringRepresentation(_numericRep)
End Get
Set(ByVal value As String)
_numericRep = Helperclass.GetNumericRepresentation(value)
End Set
End Property
Private Property NumericRep() As Integer
Get
Return _numericRep
End Get
Set(ByVal value As Integer)
_numericRep = value
End Set
End Property
为了更进一步,我甚至不会有一个HelperClass,而是一个将在系统中缓存的查找表。特别是如果你有这些查找的多种类型。字典中的值甚至可以存储在数据库中。