2009-11-28 81 views
1
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? 
} 

哪个是您的水果识别号码和名称的首选约定?为什么?还有其他例子,你会回答不同吗?何时,如果有的话,一个属性的名称是否包含该类的名称?

回答

7

一般来说,属性名称应该根据自己命名,而不是类名。

五种情况下的类名可能是作为类的部件上的前缀或后缀有用:

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

  2. 其中类作为工厂并返回其自身的实例。例如,如果Fruit有一个名为“GetFruitById”的静态方法返回一个水果。在这种情况下,您可能会更好地为该方法提供单独的FruitFactory类。

  3. 其中类包含其他类型的其他东西。在你的例子中,如果Fruit是一个显示水果进化链接的图表,那么每个Fruit实例都可以包含一个名为“DescendantFruitList”的水果列表。有机会,你可以放弃“水果”一词,它仍然是完美的描述。

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

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

9
public class Fruit 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

我知道这些属性是Fruit的属性,所以为什么重复这个名字? SomethingId是我的外键属性。

4

在我看来,几乎总是IdName是首选,并建议不要重复指定类名称。但是,一个明显的例外情况是,IdName指的是内部标识符或名称,而FruitNumberFruitName指的是实体的“真实世界标识符”或“显示名称”,并且出于某种原因您不想将其命名为DisplayName

-1

从来没有。

永远。

说真的。

+0

虽然我同意你的看法,也有在BCL许多属性包含类的名称(或它的一部分):PropertyInfo.PropertyType,DbParameter.ParameterName ... – 2009-11-28 23:53:01

2

如果客户已经做了,我只会在属性名称中冗余地指定类名。保持无处不在的语言是值得的。

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;} 
} 
相关问题