それはあなたが誰に尋ねるかによります。 Robert Martinは、2 つのルールがあることを教えてくれます。
- メソッドは小さくする必要があります。
- メソッドはそれよりも小さくする必要があります。
行数の観点から考えないでください。行数は恣意的で重要ではないメトリックです。メソッドが論理的に何をするかという観点から考えてみてください。最良のルールは次のとおりです。
または、より良い方法で言えば:
- メソッドを変更する理由は 1 つだけにする必要があります。
(まだここでボブおじさんをチャネリングしていますが、最近はクリーンコードをかなり強く打っています。)
これを次のような他の論理ルールと組み合わせます。
そして、一般に、非常に小さなメソッドになってしまいます。ただし、例外もあります。多くの場合、「1 つのこと」は 1 行、場合によっては 2 行または 3 行のコードで表現されます。しかし、それはシンプルで表現力豊かなコードであり、その「1 つのこと」が何であるかは明らかです。(もちろん、メソッドの名前は、その 1 つのことを明確に反映する必要があります。)
ただし、「1 つのこと」がより長い一連のステップである場合もあります。ドメイン内に 1 つのアトミック プロセスをカプセル化したメソッドがあるかもしれませんが、そのプロセスはたまたま 12 以上のステップで構成されています。各ステップは独自の「1 つのこと」であり、内部的には他のメソッドなどで他の「1 つのこと」を持っている可能性があります。
個々のメソッドはそれぞれ「1 つのこと」を行います。しかし、小さなステップをより大きなアトミック プロセスに集約する高レベルのカプセル化メソッドは、「1 つのこと」が多くの小さな「1 つのこと」で構成されているため、少し長くなります。まれですが、起こります。そして、それが発生したときの通常の結果は、一連のメソッド呼び出しに過ぎない 1 つのメソッドです。(これが長いメソッドの言い訳であると言っているわけではありません。コードのロジックを注意深く調べて、より大きなメソッドのリファクタリングが実際に意味があるかどうかを判断してください。)
このより大きなカプセル化方法は、多くの場合、トランザクション スクリプト パターンをビジネス ロジックに適用した結果です。ビジネス ロジック内のマルチステップ プロセスで構成される、1 つの要求に応答する 1 つのステップがあります。
メソッドは小さくする必要があります。それらはそれよりもさらに小さくする必要があります。そうでない場合は、詳細を調べて理由を判断してください。複数のレベルのインデントがある場合、それは通常、リファクタリングが必要であることを示しています。入力からのチェック アンド バランスが複数ある場合は、何らかのリファクタリングが必要になる可能性があります。メソッドが複数のことを行っている場合、または変更する理由が複数ある場合は、間違いなくリファクタリングする必要があります。