1. ホーム
  2. naming-conventions

オブジェクトを取得したり作成したりするメソッドの良い名前は何ですか?

2023-11-18 15:35:59

質問

キャッシュがあり、以下のような処理を行うメソッドがあるとします。

if (wanted Foo is not in cache)
    cache.Add(new Foo())
Return Foo from cache

そのメソッドは何と呼ぶのでしょうか? GetFoo() , GetOrCreateFoo() とか、何か他の(より良い)方法があるのでしょうか?それとも、これは本当に2つのメソッドに分割されるべきですか?

どのように解決するのですか?

ほとんどの場合、単純な GetFoo で十分です。呼び出し側は、あなたがそれを作成しキャッシュしていることを知る必要はありません。それがカプセル化というものです。

しかし、状況によっては、作成は高価な操作なので、オンデマンドで何かを作成する可能性があり、場合によってはそれが遅くなることを知っておくと便利でしょう。この場合、異なる命名規則によって呼び出し元が明確になります。 GetOrCreate() または Get(Options.CreateIfMissing) は呼び出し元への良いヒントとなります。

(動作はもちろんドキュメントに記すべきですが、呼び出されるすべてのメソッドのドキュメントを持ち出して読まなくても、コードを読んでいる間に副作用について思い出させるメソッド名を使用するのは良いことです)

私がこのようなケースを最もよく見かけるのは、(例えば)ツリーノードを見つけるとき(例えば XML ドキュメント内)、次のような場合です。 CreateNode (ツリーに追加することなくノードを作成する) と AddNode (既存のノードをツリーに追加する)があります。この場合、"Add a node if it doesn't already exist"には別の説明的な名前が必要なので、次のようなものを使用することにします。 EnsureNodeExists のようなものを使用して区別し、目的を明確にします。