Префикс абстрактных классов с "A" подобными интерфейсами с префиксом "I"? - PullRequest
4 голосов
/ 07 апреля 2009

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

Мой вопрос: почему «AFourLeggedAnimal: IAnimal» не зацепился? Это просто из-за возможного беспорядка (который я только заметил, записывая это), например, путая его как «четвероногое животное» вместо «абстрактный класс FourLeggedAnimal»? Или это нечто большее?

Переходя от Java в школе к C # на работе, я обнаружил, что соглашение об именовании префиксов «I» чрезвычайно полезно при просмотре списка классов, и мне кажется, что было бы удобно различать конкретные и неконкретные классы с первого взгляда без необходимости смотреть на код.

Ответы [ 5 ]

14 голосов
/ 07 апреля 2009

Используйте суффикс «База», как упоминает Джоэл. Когда у вас есть много в вашем проекте, это довольно легко отличить:

public abstract AnimalBase
{
  public AnimalType AnimalType { get; set; }
}

public abstract HorseBase : AnimalBase
{
  public HoovesManufacturer HoovesManufacturer { get; set; }
}

public class Pony : HorseBase
{
  public Pony()
  {
  }
}
13 голосов
/ 07 апреля 2009

Я предпочитаю использовать суффикс "Base".

4 голосов
/ 07 апреля 2009

Потому что, откровенно говоря, принятый шаблон для именования абстрактных классов уже установлен ;-) Он имеет суффикс "Base", такой как MyControlBase или FooBase.

-Oisin

2 голосов
/ 07 апреля 2009

В Java многие «абстрактные» классы имеют префикс «Abstract», например, - AbstractList и т. Д.

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

Лично я нахожу приставку "I" для интерфейсов довольно уродливой. Я считаю, что не следует пытаться закодировать такие детали в имени класса. Я полагаю, что, комбинируя детали реализации с именем интерфейса, мы получаем действительно значимые, но короткие имена. Прекрасным примером являются карта Java, HashMap и т. Д., Все они очень разборчивы и лаконичны.

1 голос
/ 27 октября 2010

Префикс I уродлив, но, к сожалению, это соглашение Microsoft. В идеальном мире мы все должны программировать для интерфейсов. Конкретные классы будут иметь суффикс Impl или что-то, что отличает их от интерфейса или абстрактного класса (и нам все равно, потому что наши контейнеры IoC справятся с этим за нас!)

например. Book будет интерфейсом или абстрактным классом, и не важно, какой именно. Мы бы программировали на красивые чистые имена большую часть времени. Фактическая реализация, которую можно использовать, легко подключается из файла конфигурации.

Но, увы, мы не живем в таком идеальном мире.

...