.NET集合命名约定
我的同事和我一直在讨论应该叫什么集合。
例如:
类产品 – 集合 – 类产品
要么
类产品 – 集合 – 类ProductCollection
我已经四处看看,看看我是否可以看到使用其中一个的任何指导方针或原因,但似乎没有任何东西出现。 例如,框架似乎使用两种变体。 我可以看到的论点是,具有products变量集合的类应该被称为Products,但它应该是ProductCollection类型。
哪个是正确的?
在同一个叶片中有一个标准,用于命名函数的返回变量。 例如retVal?
我们主要用C#编写代码,虽然我不确定这会影响我的问题。
我会说,对于generics,很少有理由创建自定义集合类型。 但是如果你必须我会说ProductCollection
最适合框架的命名约定。
不过,请考虑使用List
或Collection
或更好的IList
或ICollection
。
编辑: 这是对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
的面包,则将其称为pieceOfBread
或pieceOfBreadToBeEatenLater
。
希望有所帮助,并且它离某个地方不远:p
Thesaurus.com
不要再犹豫了。 你不再会考虑多元化的奇点。 只需将这些复数保护器中的一个固定到您的对象名称:
- 混乱
- 凝块
- 特罗韦
- 杂记
- 翻译
- 加载
- 凝聚
- 冢
- 系列
- 词汇
- 鼓起
- 词汇表
- 囤
- 一群
- 组
- 簇
- 护航
- assembly
- 一群
- 暴民
- 批量
- Amassment
- 桩
- 银行
- 集合
- 丛
- 体积
- 组
- 保留
- 汇编
- 群
- 军队
让它变得有趣。