什么时候,如果属性的名称应该包含类的名称?

dev*_*xer 1 c# naming-conventions

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?
}
Run Code Online (Sandbox Code Playgroud)

这是水果的识别号码和名称的首选约定?为什么?还有其他例子,您会以不同的方式回答吗?

Luk*_*Led 9

public class Fruit
{
    public int Id { get; set; }
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我知道这些属性是Fruit的属性,为什么要重复这个名字呢?SomethingId对我来说是外国的关键财产.


ric*_*ent 7

通常,属性名称应以其自身命名,而不是类.

五种情况,其中类名可能在类的成员上用作前缀或后缀:

  1. 所需的属性名称是您所用语言的保留字.例如,FruitType而不是Type.在大多数情况下,最好将属性命名为其他内容.

  2. 该类充当工厂并返回其自身的实例.例如,如果Fruit有一个名为"GetFruitById"的静态方法,它返回一个水果.在这种情况下,您可能最好为该方法使用单独的FruitFactory类.

  3. 类包含其自身类型的其他东西.在你的例子中,也许,如果Fruit是一个显示水果进化链接的图表,每个Fruit实例都可以包含一个名为"DescendantFruitList"的水果列表.有可能,你可以放弃"水果"这个词,它仍然是完全描述性的.

  4. 域模型中类的名称与常用编程命名约定中使用的单词匹配.示例:表示文字(真实世界)工厂,列表,字典等的对象,并且还需要在编程中对相关类使用相同的单词.

  5. 与O/R映射到数据库的兼容性或外部接口的实现,其成员恰好具有相同的单词.例如,如果Fruit实现了现有的IFruitStandProduct接口.在这种情况下,您不负责命名的巧合.