.NET集合命名约定

我的同事和我一直在讨论应该叫什么集合。

例如:

类产品 – 集合 – 类产品

要么

类产品 – 集合 – 类ProductCollection

我已经四处看看,看看我是否可以看到使用其中一个的任何指导方针或原因,但似乎没有任何东西出现。 例如,框架似乎使用两种变体。 我可以看到的论点是,具有products变量集合的类应该被称为Products,但它应该是ProductCollection类型。

哪个是正确的?

在同一个叶片中有一个标准,用于命名函数的返回变量。 例如retVal?

我们主要用C#编写代码,虽然我不确定这会影响我的问题。

我会说,对于generics,很少有理由创建自定义集合类型。 但是如果你必须我会说ProductCollection最适合框架的命名约定。

不过,请考虑使用ListCollection或更好的IListICollection

编辑: 这是对MrEdmundo在下面的评论的回应。

在您的情况下,您有两个选择。 最明显的选择是使用这样的inheritance:

 class Ball { } class BallCollection : List { public String Color { get; set; } public String Material { get; set; } } 

我说得很明显,因为乍一看似乎是最好的主意,但经过一番思考后,很明显这不是最好的选择。 如果您或Microsoft创建新的SuperAwesomeList并且您想使用它来提高BallCollection类的性能, BallCollection怎么办? 这很困难,因为您通过inheritance绑定到List类,并且更改基类可能会破坏使用BallCollection作为List任何代码。

那么什么是更好的解决方案? 我会建议在这种情况下,你最好支持组合而不是inheritance。 那么基于组合的解决方案会是什么样子呢?

 class Ball { } class BallCollection { public String Color { get; set; } public String Material { get; set; } public IList Balls { get; set; } } 

请注意,我已将Balls属性声明为IList类型。 这意味着只要该类型实现IList ,您就可以使用您希望的任何类型自由地实现该属性。 这意味着您可以在任何时候自由使用SuperAwesomeList ,这使得此类型的可扩展性更强,维护更少痛苦。

产品肯定不正确恕我直言。 非静态类名应该表示名词(不是复数),因为你应该可以说“ x是[classname] ”。

显然, 产品不适合该方案。 ProductCollection做:

插图:

 var products = new Products(); // products is a Products var products = new ProductCollection(); // products is a ProductCollection 

哪一个“听起来不错”?

关于命名集合类的另一件事:我通常尝试以这样的方式命名集合类,以便清楚它是什么类型的集合。

例如:

  • class ProductCollection :只能枚举并检索Count(即只实现ICollection接口)
  • class ProductList :可以使用Add(),Insert()等操作的列表(即实现IList接口)
  • class ProductDictionary :某些键可访问的产品字典(即实现IDictionary接口)

如果可能会怀疑字典的键是什么,那么最后一个可能是不明确的,因此最好指定键类型是什么(如ProductDictionaryByString)。 但说实话,我很少用这种方式命名,因为大多数时候密钥都是字符串。

.NET Framework经常对其集合类型使用“Collection”后缀。 StringCollection,ObservableCollection,KeyedCollection等。所以请使用ProductCollection。

注意到没有人回复你的retVal东西(或者我可能只是失明)。 虽然我不是专家; 关于retVal问题,我不是100%肯定你的意思是“命名返回变量”,但如果你的意思是这样的东西:

 public void GetSomething(out object retVal) { retVal = ThingFactory.CreateSomething(); } 

我会说,不管惯例是什么,都不要这样做。 这很烦人。 只需返回值即可。 如果你需要返回多个东西,那么我认为该方法要么做不止一件事(一个方法不应该),要么这些东西应该包含在某种可以返回的逻辑类中。

如果改为“命名返回变量”,你的意思是这样的:

 var retVal = ThingFactory.CreateSomething(); 

然后我会说根据它是什么来命名变量。 它将被用于什么。 如果它是汽车列表,请将其称为listOfCars ,如果它是稍后pieceOfBread的面包,则将其称为pieceOfBreadpieceOfBreadToBeEatenLater

希望有所帮助,并且它离某个地方不远:p

Thesaurus.com

不要再犹豫了。 你不再会考虑多元化的奇点。 只需将这些复数保护器中的一个固定到您的对象名称:

  • 混乱
  • 凝块
  • 特罗韦
  • 杂记
  • 翻译
  • 加载
  • 凝聚
  • 系列
  • 词汇
  • 鼓起
  • 词汇表
  • 一群
  • 护航
  • assembly
  • 一群
  • 暴民
  • 批量
  • Amassment
  • 银行
  • 集合
  • 体积
  • 保留
  • 汇编
  • 军队

让它变得有趣。