web-dev-qa-db-ja.com

メソッドは1つのことを行い、それで得意とする必要がありますか?

"Extract Till You Drop"はボブおじさんのブログで私が読んだものです。つまり、メソッドは1つのことだけでうまくいくはずです。

その1つは何ですか?メソッドの抽出をいつ停止する必要がありますか?

次のメソッドを持つログインクラスがあるとします。

 public string getAssistantsPassword()
 public string getAdministratorsPassword()

これらは、データベース内のそれぞれのアカウントパスワードを取得します。次に:

 public bool isLogInOk()

このメソッドは、呼び出された、または選択されたパスワードを比較し、ユーザーが提供したパスワードがデータベースにあるかどうかを確認します。

これは「あなたが落とすまで抽出する」の例ですか? 抽出しすぎていることはいつわかりますか?

11
KyelJmD

多すぎるを抽出しましたコード自体はメソッド名よりも明確です

確信が持てない場合、私が見たほとんどすべてのプログラマーは、最適なものではなく、逆の方法よりもはるかに大規模なモノリシックな方法を構築していることに留意してください。

わずか数行のコードを使用する方法は、適切に設計されたアプリ/ライブラリの非常に典型的なものです。

26
Boris Yankov

クリーンコードを引用するには、36ページで次のように述べています。

したがって、関数が「1つ以上のこと」を実行していることを確認する別の方法は、その実装の単なる再表示ではない名前で別の関数を抽出できるかどうかです。

10
BЈовић

一般的な考え方は、他に何も抽出できず、論理的なコードの塊を取得できる場合に、抽出が完了したということです。取り出すことができる関数の部分がある場合、それが記述して名前を付けることができる何かを行う場合、そしてコードの他の部分から呼び出す必要があると想像できる場合は、抽出する必要がありますそれ。

コードの別の部分から呼び出す必要がない場合でも、独立した関数であるため、単体で単体テストを記述できるため、バグ検出が向上し、独立してプロファイルを作成できますこれにより、コードのパフォーマンス低下を評価する能力が向上します。

複数の機能を実行する関数がなくなるまでコードを抽出します-関数から別の関数にコードを引き出すことができ、新しい関数が何らかのタスクを実行し、そのタスクが何であるかを説明できる場合は、次に、そのコードを抽出します。パフォーマンスが心配な場合は、後でいつでもインライン化できます。

5
Dan