2010-04-04 5 views
0

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

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

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 

EDIT: По рекомендации Абеля я назвал класс ValueCache.

+1

Markdown действительно сосет при подсветке VB. – kennytm

+0

@KennyTM: что помогает использовать комментарии VB с одинарными кавычками, а также заканчивать каждую строку одной цитатой (немного работы, я знаю). MarkDown рассмотрит комментарии строки, но просмотр кода становится намного понятнее (больше не выделяется внутренними комментариями) – Abel

+0

@Abel. Спасибо за информацию о форматировании кода VB в MarkDown. –

ответ

1

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

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

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

+0

«NamePendingDictionary» относится к тому факту, что я жду хорошего имени для класса. –

+0

Ой, мой плохой. Извините, я отредактирую свой ответ :) – Abel

+1

Отличный ответ. Я буду спать на нем, прежде чем принимать ответ. По вашему мнению, я, вероятно, назову класс по его предполагаемому использованию. Кэш. –

0

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

1

Вы могли бы назвать это LazyDictionary, поскольку элементы не могут быть инициализированы, пока они не нужны :)

Что такое createDefaultValue? Это инициализируется как часть конструктора?

+0

Как имя LazyDictionary. createDefaultValue - это делегат/лямбда, который будет вызываться, если ключ не находится в словаре. Полученное значение будет добавлено в словарь. –

+0

Прохладный ... рад, что вам нравится имя. –

0

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

+0

@ bglenn.Я думаю, что у вас есть сторона, отслеживаемая @Abel оригинальным ответом на мой вопрос, когда он думал, что NamePendingDictionary склоняется к окончательному названию класса. Проверьте ответ @ Abel и связанные с ним комментарии. –

+0

Да, я это сделал. Я вижу вашу мысль. Мое главное было то, что если вы собираетесь абстрагировать класс и использовать для него общее имя, вы должны использовать более конкретное имя переменной для определения того, как вы его используете. – bglenn

Смежные вопросы