Tor*_*var 47 naming-conventions
假设您有一个缓存,以及一个将执行以下操作的方法:
if (wanted Foo is not in cache)
cache.Add(new Foo())
Return Foo from cache
Run Code Online (Sandbox Code Playgroud)
你会怎么称呼这种方法?GetFoo(),GetOrCreateFoo()还是其他什么东西(更好)?或者这真的应该分为两种方法吗?
Jas*_*ams 32
在大多数情况下,简单的GetFoo就足够了,因为调用者不需要知道您正在创建和缓存它.这就是封装的全部内容.
但是,在某些情况下,创建是一项昂贵的操作,因此知道您可能正在按需创建某些内容并在某些情况下它会很慢很有用.在这种情况下,不同的命名约定使调用者更清楚.在这种情况下,GetOrCreate()或Get(Options.CreateIfMissing)是调用者的一个很好的提示.
(当然应该在文档中注明这种行为,但是最好使用一个方法名称来提醒人们在阅读代码时会产生副作用,而不必为每个被调用的方法调出并阅读文档)
我发现这种情况最常见的情况是(例如)在找到树节点时(例如在Xml文档中),您可能有"CreateNode"(创建节点而不将其添加到树中)和"AddNode" (将现有节点添加到树中).在这种情况下,"添加节点(如果它尚不存在)"需要具有不同的描述性名称,因此我将使用类似"EnsureNodeExists"的内容来区分它并使目的明确.
Isi*_*lor 12
这话obtain和acquire似乎很贴切。特别是obtain:
拥有;通过努力或请求获得、获得或获得: 获得许可;以获得更好的收入。
可以说,在您的情况下,该方法的调用者获得了 foo。
怎么样Getsert?来自get或insert,自update或insert来Upsert
虽然我没有看到任何流行的框架使用这个术语,但这符合@Jason Williams指出的想法: