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?
}
水果的识别号码和名称是您的首选约定?为什么?是否有其他例子可以用不同的方式回答?
答案 0 :(得分:9)
public class Fruit
{
public int Id { get; set; }
public string Name { get; set; }
}
我知道这些属性是Fruit的属性,为什么要重复这个名字呢? SomethingId对我来说是外国的关键财产。
答案 1 :(得分:7)
通常,属性名称应以自己命名,而不是以类命名。
五种情况,其中类名可能在类的成员上用作前缀或后缀:
所需的属性名称是您所用语言的保留字。例如,FruitType而不是Type。在大多数情况下,最好将属性命名为其他内容。
该类充当工厂并返回其自身的实例。例如,如果Fruit有一个名为“GetFruitById”的静态方法,它返回一个水果。在这种情况下,您可能最好为该方法使用单独的FruitFactory类。
该类包含其自身类型的其他内容。在你的例子中,也许,如果Fruit是一个显示水果进化链接的图表,每个Fruit实例都可以包含一个名为“DescendantFruitList”的水果列表。有可能,你可以删掉“水果”这个词,它仍然是完全描述性的。
域模型中类的名称与常用编程命名约定中使用的单词匹配。示例:表示 literal (真实世界)Factory,List,Dictionary等的对象,并且还需要在编程中对相关类使用相同的单词。
与数据库的O / R映射的兼容性或成员碰巧具有相同单词的外部接口的实现。例如,如果Fruit实现了现有的IFruitStandProduct接口。在这种情况下,您不应对命名的巧合负责。
答案 2 :(得分:4)
在我看来,几乎总是Id
和Name
是首选,并且不建议冗余地指定类名。但是,一个值得注意的例外是当Id
或Name
引用内部标识符或名称时FruitNumber
和FruitName
引用“真实世界标识符”或“显示名称”实体,由于某种原因,您不想将其命名为DisplayName
。
答案 3 :(得分:2)
如果客户已经这样做,我只会在属性名称中冗余地指定类名。保持无处不在的语言是值得的。
答案 4 :(得分:1)
我有时需要这样做(很少),例如:
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;}
}
答案 5 :(得分:-1)
从不。
自从。
严重。