オブジェクトを取得したり作成したりするメソッドの良い名前は何ですか?
質問
キャッシュがあり、以下のような処理を行うメソッドがあるとします。
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
のようなものを使用して区別し、目的を明確にします。
関連
-
[解決済み] あるソースコードのファイルの拡張子として使われている.distとは、どのような意味ですか?
-
[解決済み] キャメルケースとパスカルケースの間違い
-
[解決済み] オブジェクト名の前のシングルアンダーコアとダブルアンダーコアの意味は何ですか?
-
[解決済み] ハイフンで区切られた大文字小文字は何と言う?
-
[解決済み】クラスやメソッドの命名が、プログラミングで最も難しい部分の1つだと思う人はいますか?[解決済み]
-
[解決済み] 命名規則について。「状態」対「ステータス」 [終了しました]
-
[解決済み] ブール法のネーミングの読みやすさ
-
[解決済み] データ取得のためのメソッド名【終了しました
-
[解決済み] 個数変数の命名規則 [終了しました]。
-
[解決済み] アセット(画像、CSS、JS)の命名規則?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン