Каким должно быть название этого класса? - PullRequest
0 голосов
/ 04 апреля 2010

Называть классы иногда сложно. Как вы думаете, какое название класса должно быть?

Изначально я создал класс для использования в качестве кэша, но вижу, что он может использоваться и в других целях. Пример кода для использования класса.

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

РЕДАКТИРОВАТЬ: По совету Абеля я назвал класс ValueCache.

Ответы [ 4 ]

1 голос
/ 04 апреля 2010

Вы можете назвать это LazyDictionary, поскольку элементы не могут быть инициализированы до тех пор, пока они не потребуются:Это инициализируется как часть конструктора?

1 голос
/ 04 апреля 2010

В общем, лучше называть класс в соответствии с его предполагаемым использованием. Если впоследствии пользователи обнаружат, что другое использование возможно или возможно, не стоит переименовывать свой класс. Причина переименования вашего класса должна состоять только в том, чтобы сделать его предполагаемое использование более понятным.

(правка) Другие прокомментировали новые имена, такие как CacheManager, DeferredCache, LazyCollection, AssignedValueMap и т. Д. Если исходное намерение очень общее, используйте такие имена. Если предполагаемое использование более конкретно, назовите его так: CookiesCache, UsersList и т. Д.

Если вы оказались в ситуации, когда у вас есть универсальный вариант использования для другого конкретного класса, создайте более общий базовый класс с общим именем и используйте определенный подкласс для конкретного (исходного) варианта использования. Вот о чем ОО; -)

0 голосов
/ 04 апреля 2010

Я думаю, что, как предположил Абель, карта - это хороший термин для использования. Я хотел бы рассмотреть присвоение имени классу, например, AssignedValueMap, а затем использовать более конкретные имена переменных, чтобы прояснить, как вы используете AssignedValueMap в каждом случае. Поэтому, где вы используете его для ожидающих имен, я объявил бы связанную переменную как Dim pendingNamesMap = New AssignedValueMap (Of String, Sample).

0 голосов
/ 04 апреля 2010

Назовите этот класс CacheManager и НЕ помещайте в него другие функции.

...