Как правильно называть «зонтик»? - PullRequest
6 голосов
/ 24 февраля 2010

Это "всегда" беспокоило меня ...

Допустим, у меня есть интерфейс IFiddle и другой интерфейс, который не более чем объединяет несколько различных IFiddle s:

public interface IFiddleFrobbler
{
    IFiddle Superior { get; }
    IFiddle Better { get; }
    IFiddle Ordinary { get; }
    IFiddle Worse { get; }
    IFiddle Crackpot { get; }
}

(Конкретные IFiddleFrobbler s и IFiddle s зависят от конфигурации и создаются заводом.)

Я неоднократно сталкиваюсь с именами таких "зонтичных" типов - я хочу обменять "Frobbler" на что-то описательное.

  • «Коллекция», «Список» и «Набор» недостаточно хороши, в том смысле, что это не коллекция / список / набор, где элементы могут быть перечислены, добавлены или удалены.
  • «Менеджер» отсутствует, потому что управление не выполняется - фабрика и конфигурации справляются с этим.
  • «Агрегатор» делает его звучащим как выбранный прямо из книги GoF (хотя я не думаю, что они нарушат «закон деметры» - это здесь неуместно).

Пожалуйста, просветите меня, какова хорошая схема именования для моих "зонтичных" типов?


Редактировать: Как указал xtofl в комментарии , на самом деле семантики здесь больше, чем я впервые показал выше. Если я вместо этого сделаю следующее, я думаю, что моя потребность прояснится:

//
// Used for places where the font width might need
// to be tapered for a rendered  text to fit.
//
public interface ITaperableFont
{
    Font Font { get; }
    Boolean CanTaper { get; }

    void Taper();
}

//
// Used for rendering a simple marked-up text in
// a restricted area.
//
public interface ITaperableFonts
{
    ITaperableFont Biggest{ get; }
    ITaperableFont Big { get; }
    ITaperableFont Normal { get; }
    ITaperableFont Small { get; }
    ITaperableFont Smallest { get; }
}

На самом деле, я обнаружил, что моя проблема в реальном дополнении выше - это недостаток дизайна, а не проблема имен, запах которой несколько человек указали ниже.

Ответы [ 5 ]

7 голосов
/ 24 февраля 2010

Я согласен с вами в том, что назвать класс, интерфейс или абстрактный класс действительно сложно. Вот некоторые возможные имена, которые я использовал перед вами:

  • ххх Assistant
  • Composite ххх
  • ххх Coordinator
  • ххх Group
7 голосов
/ 24 февраля 2010

Можете ли вы просто использовать множественное число: IFiddles?

3 голосов
/ 24 февраля 2010

Как сказал Поп: «Если ты не можешь назвать это, то я чувствую что-то подозрительное в дизайне».

возможно, переосмыслите свой дизайн.

IFiddles : IDictionary<SomeType, IFiddle>
{
}

Обновление: если вы хотите, чтобы он был доступен только для чтения, создайте для этого интерфейс самостоятельно:

IReadOnlyDictionary<TKey,TValue>
{
     TValue this[TKey] { get; }
     int Count { get; }
     ...
}

Ваша жизнь может быть такой же легкой, как и раньше.

3 голосов
/ 24 февраля 2010

Я бы сказал, что выбранное вами имя должно зависеть от того, чего вы пытаетесь достичь. В примере кода я бы сказал, что вы делаете настройку рейтинга, поэтому я бы назвал его IFiddleRating

В качестве общего ответа я бы сказал, что "это зависит" :) Я считаю хорошей идеей называть вещи после того, что они пытаются сделать, а не то, что они "есть"

1 голос
/ 24 февраля 2010

Я думаю, что это действительно проблема личных предпочтений, поэтому я запустил тезаурус и искал синонимы "Семья" (что само по себе может быть хорошо).

род, классификация, жанр, группа, вид, подразделение, ассоциация, принадлежность, альянс, клан, клика, клуб, коалиция, комбинация, комбо, конфедерация, конфедерация, конгресс, кооператив, семья, федерация, братство, братство, банда , гильдия, лига, мафия, орден, организация, кольцо, общество, содомия, женское общество, синдикат, врезка, связывание, племя, войска, труппа, зоопарк

Я отбросил несколько, которые имеют конкретное техническое значение (например, объединение, кольцо, пул) ... выберите то, что вам больше нравится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...