Когда, если вообще, должно ли имя свойства содержать имя класса? - PullRequest
1 голос
/ 29 ноября 2009
public class Fruit
{
    // choose one
    public int Id { get; set; }
    public int FruitId  get; set; } // redundant or usefully more descriptive?

    // choose one
    public string Name { get; set; }
    public string FruitName { get; set;} // redundant or usefully more descriptive?
    public string Fruit { get; set; } // or what about this?
}

Какое соглашение вы предпочитаете для идентификационного номера и названия фрукта? Зачем? Есть ли другие примеры, где вы бы ответили по-другому?

Ответы [ 6 ]

9 голосов
/ 29 ноября 2009
public class Fruit
{
    public int Id { get; set; }
    public string Name { get; set; }
}

Я знаю, что эти свойства являются свойствами Фруктов, так зачем повторять это имя? SomethingId - это свойство внешнего ключа для меня.

7 голосов
/ 29 ноября 2009

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

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

  1. Желаемое имя свойства является зарезервированным словом на вашем языке. Например, FruitType вместо Type. В большинстве случаев лучше просто назвать свойство как-нибудь еще.

  2. Где класс действует как фабрика и возвращает экземпляры самого себя. Например, если у Fruit есть статический метод с именем «GetFruitById», который возвращает фрукт. В этом случае вам, вероятно, будет лучше иметь отдельный класс FruitFactory для этого метода.

  3. Где класс содержит другие вещи своего типа. Возможно, в вашем примере, если Fruit - это график, показывающий эволюционные связи фруктов, каждый экземпляр Fruit может содержать список фруктов, происходящих от него в так называемом «DescendantFruitList». Скорее всего, вы могли бы опустить слово «фрукты», и оно все равно было бы совершенно наглядным.

  4. Имя класса в вашей доменной модели соответствует слову, используемому в общих соглашениях по присвоению имен. Пример: объект, представляющий литерал (в реальном мире) Factory, List, Dictionary и т. Д., А также нуждающийся в использовании тех же слов для связанных классов в вашем программировании.

  5. Совместимость с отображением O / R в базе данных или реализацией внешнего интерфейса, члены которого имеют одно и то же слово. Например, если Fruit реализует существующий интерфейс IFruitStandProduct. В этом случае вы не несете ответственности за совпадение имен.

4 голосов
/ 29 ноября 2009

По моему мнению, почти всегда Id и Name предпочтительны, и избыточное указание имени класса не рекомендуется. Однако, заметным исключением является случай, когда Id или Name ссылаются на внутренний идентификатор или имя, а FruitNumber и FruitName ссылаются на "идентификатор реального мира" или "отображаемое имя" сущности, и по какой-то причине вы не не хочу называть это DisplayName.

2 голосов
/ 29 ноября 2009

Я бы излишне указывал имя класса в имени свойства, если это уже сделал клиент. Поддержание вездесущего языка того стоит.

1 голос
/ 30 ноября 2009

Мне иногда нужно сделать это (редко) в случае, подобном:

class Fruit {
 public int ID {get; set;}
}

class Apple : Fruit {
// I want to call this ID also but it refers to a different ID than the base ID
 public int AppleID {get; set;}
}
0 голосов
/ 29 ноября 2009

Никогда.

Ever.

Серьезно.

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