我的同事和我一直在讨论应该叫什么集合。
例如:
类产品 - 收藏 - 类产品
或
类产品 - 集合 - 类ProductCollection
我已经四处看看,看看我是否可以看到使用其中一个的任何指导方针或原因,但似乎没有任何东西出现。例如,框架似乎使用两种变体。我可以看到的论点是,具有products变量集合的类应该被称为Products,但它应该是ProductCollection类型。
哪个是正确的?
在同一个叶片中有一个标准,用于命名函数的返回变量。例如retVal的?
我们主要用C#编码,虽然我不确定这会影响我的问题。
答案 0 :(得分:44)
我想说,对于泛型,很少有理由创建自定义集合类型。但是如果你必须我会说ProductCollection
最适合框架的命名约定。
不过,请考虑使用List<Product>
或Collection<Product>
或更好但IList<Product>
或ICollection<Product>
。
编辑: 这是对MrEdmundo在下面的评论的回应。
在您的情况下,您有两个选择。最明显的选择是使用这样的继承:
class Ball { }
class BallCollection : List<Ball>
{
public String Color { get; set; }
public String Material { get; set; }
}
我说得很明显,因为它似乎似乎乍一看是最好的主意,但经过一番思考后,很明显这不是最好的选择。如果您或Microsoft创建新的SuperAwesomeList<T>
并且您希望使用它来提高BallCollection
课程的效果,该怎么办?这很困难,因为你通过继承绑定到List<T>
类,更改基类可能会破坏使用BallCollection
作为List<T>
的任何代码。
那么什么是更好的解决方案?我建议在这种情况下,你最好支持组合而不是继承。那么基于组合的解决方案会是什么样的呢?
class Ball { }
class BallCollection
{
public String Color { get; set; }
public String Material { get; set; }
public IList<Ball> Balls { get; set; }
}
请注意,我已将Balls
属性声明为IList<T>
类型。这意味着只要该类型实现IList<T>
,您就可以使用您希望的任何类型自由地实现该属性。这意味着您可以在任何时候自由使用SuperAwesomeList<T>
,这使得此类型的可扩展性更高,维护更少痛苦。
答案 1 :(得分:21)
产品肯定不正确恕我直言。非静态类名应该代表名词(不是复数),因为你应该可以说“ x是[classname] ”。
显然,产品不适合该计划。 ProductCollection 可以:
插图:
var products = new Products(); // products is a Products
var products = new ProductCollection(); // products is a ProductCollection
哪一个“听起来不错”?
关于命名集合类的另一件事:我通常尝试以这样的方式命名集合类,以便清楚它是什么类型的集合。
例如:
如果对字典的键是什么有疑问,那么最后一个可能是不明确的,因此最好指定键类型是什么(如ProductDictionaryByString)。但说实话,我很少用这种方式命名,因为大多数时候密钥都是字符串。
答案 2 :(得分:6)
.NET Framework经常为其集合类型使用“Collection”后缀。 StringCollection,ObservableCollection,KeyedCollection等。所以请使用ProductCollection。
答案 3 :(得分:5)
注意到没有人回复你的retVal(或者我可能会失明)。虽然我不是专家;关于retVal
问题的问题,我不是100%肯定“返回变量的命名”是什么意思,但如果你的意思是这样的话:
public void GetSomething(out object retVal)
{
retVal = ThingFactory.CreateSomething();
}
我想说,无论约定是什么,都不要这样做。这很烦人。只需返回值即可。如果你需要返回多个东西,那么我认为该方法要么做不止一件事(一个方法不应该),要么这些东西应该包含在某种可以返回的逻辑类中。< / p>
如果用“命名返回变量”代替这样的东西:
var retVal = ThingFactory.CreateSomething();
然后我会根据它的名称命名变量。它将被用于什么。如果是汽车列表,请将其称为listOfCars
,如果它是以后要吃的面包,请将其称为pieceOfBread
或pieceOfBreadToBeEatenLater
。
希望有所帮助,并且它离某个地方不远:p
答案 4 :(得分:2)
<强> Thesaurus.com 强>
不要再犹豫了。你不再会考虑多元化的奇点。只需将其中一个复数保护器固定到您的对象名称上即可:
让它变得有趣。