Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 使用复数来命名集合是一种好的做法吗?_Oop_Design Patterns_Coding Style_Naming Conventions - Fatal编程技术网

Oop 使用复数来命名集合是一种好的做法吗?

Oop 使用复数来命名集合是一种好的做法吗?,oop,design-patterns,coding-style,naming-conventions,Oop,Design Patterns,Coding Style,Naming Conventions,简单地说,使用复数来命名集合和复合对象是一个好主意吗 class PandaBears { PandaBear[] bears; class PandaBear { } } 我担心的是类名非常相似。另一方面,PandaBearList揭示了实现,但更容易区分。我会避免复数 如果不希望包含后缀列表,则始终可以使用后缀集合,这是一种标准约定,不会显示实现细节。当然,这取决于您使用的语言 如果结构不是很复杂的话,我喜欢使用一个C#特定的工作。通过将所有方法声明为相关IEnumer

简单地说,使用复数来命名集合和复合对象是一个好主意吗

class PandaBears {
   PandaBear[] bears;

   class PandaBear {
   }
}

我担心的是类名非常相似。另一方面,
PandaBearList
揭示了实现,但更容易区分。

我会避免复数

如果不希望包含后缀
列表
,则始终可以使用后缀
集合
,这是一种标准约定,不会显示实现细节。当然,这取决于您使用的语言


如果结构不是很复杂的话,我喜欢使用一个C#特定的工作。通过将所有方法声明为相关
IEnumerable
的扩展方法,可以完全避免创建集合类。因此,在本例中,只要集合没有其他私有变量,就可以在
IEnumerable
上声明扩展方法

我更喜欢使用复数,因为正如您所提到的,它并不表示实现,将来很容易改变。关于命名约定的另一个考虑因素是,如果您使用的是ORM,那么在转换数据库模式时,它将使用什么类型的约定,例如。你可能会从这两方面得到很多建议。我认为更重要的是,你选择一个适合你和你的团队的惯例,并坚持下去。

我更喜欢
PandaBearCollection
。作为可数名词的类名更符合OOP的基本隐喻,即“对象”

例如,尝试描述以下两个函数的签名:

void func(PandaBearCollection collection1, PandaBearCollection collection2);
void func(PandaBears pandaBears1, PandaBears pandaBears2);
第一个自然是:“一个需要两个熊猫集合的功能”


第二个是什么?“一个需要两只熊猫的函数”?不,就是不行。

我不知道这是不是一种好的做法。但是我不喜欢用复数。我会使用
PandaBearCollection
.IMO,如果我有一些特殊的方法(例如返回一些具有特定值的元素等),或者我想要一个严格的API,其中只包含允许用户在集合中使用的方法,否则,我会重复使用集合、列表或集合(java)。我更喜欢概念名称。你的外部班级的角色是什么?考虑一下它的用途,选择一个合适的名字。潘达贝尔森林?潘达贝拉姆?潘达贝卡?PandaBearGroup?也许你根本不需要外部类。看起来与以下内容相关:好的,我认为复数应该读得更好,但是当谈论类和对象时,它会让人困惑。