如何命名类似工厂的方法?

问题描述 投票:135回答:11

我想大多数类似工厂的方法都以create开头。但是为什么将它们称为“ create”?为什么不使用“ make”,“ produce”,“ build”,“ generate”或其他?这只是口味问题吗?约定?还是“创建”中有特殊含义?

createURI(...) 
makeURI(...)
produceURI(...)
buildURI(...)
generateURI(...)

您一般选择哪个,为什么?

coding-style naming-conventions methods factory
11个回答
109
投票

一些随机的想法:

  • 'Create'比其他大多数词更适合该功能。我能想到的第二个最好的词是“构造”。过去,“ Alloc”(分配)可能已在类似情况下使用,反映出比C语言等对象更重视数据块。

  • 'Create'是一个简短的简单单词,具有明显的直观含义。在大多数情况下,人们可能只是希望将其作为想要创建某些东西时想到的第一个最明显的词。这是一种常见的命名约定,“对象创建”是描述...创建对象的过程的一种常见方式。

  • 'Construct'很接近,但是通常用于描述创建对象过程中的特定阶段(分配/新建,构造,初始化...]

  • 'Build'和'Make'是与编译代码相关的过程的常用术语,因此对程序员而言具有不同的含义,这意味着该过程包含许多步骤,并且可能包含许多磁盘活动。但是,工厂“构建”某物的想法是一个明智的想法-尤其是在构建复杂的数据结构或以某种方式组合许多单独的信息的情况下。

  • ''Generate'对我而言意味着一种计算,该计算用于从输入中生成值,例如生成哈希码或随机数。

  • 'Produce','Generate','Construct'的键入/读取时间比'Create'更长。从历史上看,程序员倾向于使用短名称来减少打字/阅读。


0
投票
只是普通的旧目标C的initWith也是一个好东西!

-3
投票
更多详细信息,请访问网址http://xeon2k.wordpress.com

97
投票

[有效Java] Joshua Bloch中的[suggests the following naming conventions

valueOf —返回一个松散地说具有相同值的实例作为其参数。这样的静态工厂是有效的类型转换方法。

ofvalueOf的简洁替代,由EnumSet普及(第32项)。

getInstance —返回由参数描述的实例但不能说具有相同的价值。如果是单身,getInstance不带参数,并返回唯一的实例。

newInstance —类似于getInstance,但newInstance保证返回的每个实例都与其他实例不同。

get Type —类似于getInstance,但在工厂方法位于不同的阶级。 Type表示由对象返回的对象的类型。工厂方法。

new Type —类似于newInstance,但在工厂方法位于不同的阶级。 Type表示由对象返回的对象的类型。工厂方法。


22
投票

想补充一些我在其他答案中看不到的要点。

  1. 尽管从传统上讲,“工厂”的意思是“创建对象”,但我更喜欢将其更广泛地理解为“向我返回一个行为符合预期的对象”。我不必总是知道它是否是brand new object,实际上我可能不在乎。因此,在适当的情况下,即使您现在就是采用这种方式,也可以避免使用“创建...”名称。

  2. Guava是一个很好的工厂命名思想库。它正在推广一种不错的DSL风格。例子:

    Lists.newArrayListWithCapacity(100);
    ImmutableList.of("Hello", "World");
    

11
投票

“ Create”和“ make”简短,合理,并且与我能想到的其他命名方式无关。我也经常看到它们,并且怀疑它们可能是“事实上的标准”。我会选择一个并且至少在项目中始终使用它。 (查看我当前的项目,我似乎使用了“ make”。希望我能保持一致...)

避免使用“ build”,因为它更适合于Builder模式,而避免使用“ produce”,因为它会引起Producer / Consumer。

为了真正延续模式的“工厂”名称的隐喻,我会被“制造”所吸引,但这太长了。


3
投票

我认为它源于“到创建一个对象”。但是,在英语中,“创造”一词与以下概念相关联:“使之成为事物,因为它不会自然地进化或不是由普通的过程所产生的,是一种独特的事物”,而“是根据自己的思想或想象力,作为艺术品或发明。”因此,似乎“创建”是要使用的正确单词。另一方面,“制造”的意思是“通过对材料进行成形或更改,组合零件等来实现。”例如,您没有创建礼服,而make礼服(对象)。因此,我认为,“制造”是指“生产;存在或发生的原因;带来”是工厂方法更好的词。


2
投票
部分约定,部分语义。

2
投票
我喜欢新的。对我来说>

var foo = newFoo();


1
投票
我称它为[[UriFactory.Create()

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.