我不时会写一个功能,如果它还没有产生某些东西,否则什么都不做
像CreateFooIfNecessary()
或EnsureThereIsAFoo()
这样的名称可以运作,但他们觉得有点笨拙。
也可以说GetFoo()
,但该名称并不意味着可以首先创建foo
,只有当函数返回foo
的句柄/指针/引用时它才有效
你们这些熟悉英语的人能想出更好的方法来命名这些功能吗?
答案 0 :(得分:18)
GetOrCreate()
怎么样?答案 1 :(得分:13)
这些天我知道的更好,因此将应用命令查询分离(CQS)。 CQS说一个方法应 变异状态,或返回结果,而不是两者。
因此,我目前的标准是:
Foo GetFoo(id); // Throws if Foo cannot be found for id
Foo FindFoo(id); // Returns null if the Foo cannot be found.
void CreateFoo(id[, args]); // Creates a Foo with supplied args.
我经常使用这个标准:
GetFoo(); // Always returns a Foo, so creates if there isn't one already.
FindFoo(); // Returns null if the Foo cannot be found.
在您根据密钥加载员工或其他内容时,特别适用于数据访问,并且可能存在也可能不存在。
具体 - 这是一个记录在案的编码标准。在代码库上工作的每个人都知道这个标准,并以同样的方式实现它。这就是我们如何摆脱这些相当通用的好短名称。
答案 2 :(得分:6)
我会选择EnsureFoo()
。
答案 3 :(得分:3)
这通常称为懒惰创建。 LazyGetFoo()怎么样?
答案 4 :(得分:3)
所以你想成为一名创作者,对吧?然后......
LetThereBeFoo();
呵呵呵
检查是否存在
IsThereFoo();
答案 5 :(得分:3)
为什么不:
private FooType m_foo;
public FooType Foo
{
get
{
if (this.m_foo == null)
{
this.m_foo = new Foo();
}
return this.m_foo;
}
set
{
this.m_foo = value;
}
}
答案 6 :(得分:2)
我认为只有CreateFoo()就可以了。文档应指明函数在不同场景中的作用。查看一些File I / O API,例如Win32 API中的CreateFile(...)。根据参数,它将创建一个新文件或打开现有文件(如果存在)。你的不必是基于参数的,但它的行为可以根据程序的状态而有所不同。所以从根本上说,我认为你的可能也是如此。
答案 7 :(得分:1)
我将这些RequireFoo()
命名为。
答案 8 :(得分:1)
如果很明显只存在一个Foo对象,我只是将其称为CreateFoo(),因为您希望多次调用只创建一次对象。
如果要返回值,我只是将其称为GetFoo(),因为延迟加载(可能)是一个实现细节,因此,在接口中不应该很明显。
如果可以创建多个Foo对象,并且没有返回它们,那么我不确定。听起来像是一个非常奇怪的情况。
答案 9 :(得分:0)
在我的Foo课程中我会有GetExistingOrNew(Guid id) 如果存在Foo,则返回现有的Foo或返回New Foo。
答案 10 :(得分:0)
我喜欢ForceFoo
。在您的情况下,它将是EnforceExistanceOfFoo
或ForceGetFoo
。
答案 11 :(得分:0)
我最近开始使用defineFoo()
因为我厌倦了getOrCreateFoo()
答案 12 :(得分:-5)
严重:
issetFoo();
采取小便:
AreWeThereYetFoo(); helloFoo(); booFoo();