命名类有时很难。你觉得这个班的名字应该是什么?
我最初创建的类用作缓存,但可以看到它可能有其他用途。使用该类的示例代码。
Dim cache = New NamePendingDictionary(Of String, Sample)
Dim value = cache("a", Function() New Sample())
这是需要名字的类。
' <summary> '
' Enhancement of <see cref="System.Collections.Generic.Dictionary"/>. See the Item property '
' for more details. '
' </summary> '
' <typeparam name="TKey">The type of the keys in the dictionary.</typeparam> '
' <typeparam name="TValue">The type of the values in the dictionary.</typeparam> '
Public Class NamePendingDictionary(Of TKey, TValue)
Inherits Dictionary(Of TKey, TValue)
Delegate Function DefaultValue() As TValue
' <summary> '
' Gets or sets the value associated with the specified key. If the specified key does not exist '
' then <paramref name="createDefaultValue"/> is invoked and added to the dictionary. The created '
' value is then returned. '
' </summary> '
' <param name="key">The key of the value to get.</param> '
' <param name="createDefaultValue"> '
' The delegate to invoke if <paramref name="key"/> does not exist in the dictionary. '
' </param> '
' <exception cref="T:System.ArgumentNullException"><paramref name="key" /> is null.</exception> '
Default Public Overloads ReadOnly Property Item(ByVal key As TKey, ByVal createDefaultValue As DefaultValue) As TValue
Get
Dim value As TValue
If createDefaultValue Is Nothing Then
Throw New ArgumentNullException("createValue")
End If
If Not Me.TryGetValue(key, value) Then
value = createDefaultValue.Invoke()
Me.Add(key, value)
End If
Return value
End Get
End Property
End Class
编辑:根据Abel的建议,我已将ValueCache命名为。
答案 0 :(得分:1)
一般来说,最好在预期用法之后命名一个类。如果用户以后发现可能或可行的其他用法,请不要重命名您的课程。重命名课程的一个原因应该是使其预期用途更清晰。
(编辑)其他人对新名称发表了评论,例如CacheManager
,DeferredCache
,LazyCollection
,AssignedValueMap
等。如果原始意图非常通用,请使用此类名称。如果预期用途更具体,请将其命名为:CookiesCache
,UsersList
等。
如果您发现自己处于特定类的通用用例,请创建一个更通用的基类,使用通用名称,并使用特定(原始)用例的特定子类。这就是OO的意思; - )
答案 1 :(得分:1)
您可以将其称为LazyDictionary
,因为在需要之前可能无法初始化项目:)
什么是createDefaultValue
?这是否被初始化为构造函数的一部分?
答案 2 :(得分:0)
调用此类CacheManager
,不要在其中加入其他功能。
答案 3 :(得分:0)
我认为,正如亚伯所说,地图是一个很好的术语。我会考虑将类命名为AssignedValueMap,然后使用更具体的变量名来清楚说明在每种情况下如何使用AssignedValueMap。因此,当您将其用于待定名称时,我会将关联变量声明为Dim pendingNamesMap = New AssignedValueMap(Of String,Sample)。