例:レポートを生成するとき、特定のコードブロックが将来他の場所で使用されることはないが、何百もの行があることがわかっています。 10個の小さなメソッドでそのコードを壊して、1000個のアイテムのレポートをエクスポートしているときに、10個のメソッドを1000回呼び出すか、メソッドに侵入することなく単純なままにしておくといいですか?複数のメソッドで非反復コードを破る方が良いですか?
答えて
100行のコードを持つメソッドは、保守性と複雑さに悪いものです。私の推奨は、各機能を最大20行にすることです。
いくつかの非常にlongueurがケーキの一部ですが維持する絶対的な悪夢である10行の長いメソッドがあります... –
シナリオなしで読んでいる別の開発者のコードを見てください。もちろん、関数をコードの10行に保つだけで、コードの保守性と可読性を保証することはできません。また、各関数の命名と責任も見てください。それらをシンプルに保つことによって、実際にはコードの再利用可能な行の束にまたがることができます。 –
1000レコードをエクスポートした場合のパフォーマンスの問題については、10回のメソッドを1000回呼び出すことが可能です –
常に保守性を念頭に置いてください。
MainMethod(){
step1();
step2();
step3();
...
}
あなたはそれを見て、それがでやっていることを一目で得ることができる。この方法は:私はサブステップでMainメソッドを分割し、mainメソッドがどのように見えるしてもらいたい。このような I例上級。 必要に応じて、ステップを実行して実行の詳細を取得することができます。 同じ手順をステップに適用することができます。サブステップで分割して同じ結果を得ることができ、読者にステップの概要を説明し、必要に応じて詳細を確認することができます。
このアプローチの理想的な状況は、ステップ間のデータの受け渡しを心配する必要がないため、ステップ間の相互作用が制限されている場合です。
あなたはそのようにそれを書くことができた場合:
GenerateReport(){
var myReport = new ReportHelper();
myReport.addPieChart(getSalesByCategories());
myReport.addTable(getTopProducts(10));
...
return myReport;
}
行くそれのために。
あなたの人生をより楽にする(または見つけ出す)ヘルパークラスを作成します。このヘルパークラスのメソッドはaddTable()、addPieChart()です。すべてがオブジェクトを取ります。シンプルな関数を使用して、その名前が(いつものように)自明であることを確認し、実行順に記述すると、コードが読みやすくなります。 main関数はすべてのサブ関数への呼び出しを含み、最初に置いてください。将来の開発者が後で全プロセスを理解するのに良い入り口になります。それは、何かを変えるために適切な場所にジャンプすることを容易にする。また、小さな関数ごとにテストを書くこともできますが、大きなマンモスメソッドではできません。レポート生成を容易にするヘルパークラスを作成する価値があります。
実生活:ここではレポート作成ツールについて話しています。これは、アプリケーション内のコードの別の部分です。コードの他の部分とはやり取りしません。私はテストが計画されていないと思う(これは悪い)。各関数は、前のステップからのデータを必要とする可能性があり、非常に複雑です。 1つのフローでそれを書く方が簡単かもしれません。それは、グローバル変数とのジャグリングを避け、12のパラメータを渡します...しかし、上記の関数宣言と同様に、10〜20行ごとにコメントを記述してください。最初にプロセスの説明を追加することをお勧めします(他のケースの主な機能のように見えます)。ここでの問題は、将来のメンテナーがコードを変更し、メインプロセスの説明の変更を反映しない可能性がありますが、小さな機能でそれをやるように強制されることです。
私にとっては、使用する言語に依存しますが、私は小さな機能(理論)を好みますが、スパゲッティコード(現実)を書くことがよくあります。私は、コードの一部を再利用する必要があるときに関数を作成します。また、使用される言語にも依存します。私はこれを書く必要はありません。すべてのvarsの前に、グローバル変数を参照してください。
パフォーマンスに関して、各関数呼び出しには少し時間がかかりますが、このケースでは違いはありません。
- 1. 複数の反復または複雑なコードですか?
- 2. 非ジェネリックリストを反復処理する最良の方法はどれですか?
- 3. ラムダ関数はより良いか反復ですか?
- 4. destroy()は反復で破棄しない
- 5. JSONを複数のレベルで反復処理する方法は?
- 6. 複数の結果を反復で返していますか?
- 7. 非同期関数を反復する
- 8. 非反復乱数配列
- 9. 非反復乱数ピッカー
- 10. jqueryで複数選択オプションを反復処理する方法
- 11. 複数の条件でのベクトル反復?
- 12. ソケットから複数の値を反復処理する方法
- 13. 複数のデータテーブルを反復する
- 14. 複数のパンダシリーズを反復する
- 15. 複数のファイルアップロードフィールドを反復する
- 16. mysqli_fetch_all()メソッドを反復する方法
- 17. C++でURLパターンマッチングを行うより良い方法は反復法ですか?
- 18. whileループの各反復で変数が破棄されませんか?
- 19. シェルスクリプトで反復を非同期で実行する方法
- 20. Webcrawler複数ページの反復
- 21. pytorchデータローダ複数の反復
- 22. このコードにIEnumerableの反復が本当に複数ありますか?
- 23. 反復破壊私は
- 24. 破壊的なスタック反復
- 25. 非反復@NamedQuery
- 26. 複数コードのコードスニペットをVSコードで定義する方がいいですか?
- 27. 反復ブロックのコードを関数に変換する方法
- 28. 複数の反復の復帰方法の理解
- 29. プロミスイテレータを反復する非再帰的メソッド
- 30. ターゲットサーバーがJmeterで複数の反復で応答しません
これはしばしば趣味や美学の問題であり、一般的には答えられません。 –
*パフォーマンスの面で10回のメソッド1000回* =>を呼び出すと良いですか?違いを気付くことさえできません。 –
私は1000のレコードをエクスポートしている場合、パフォーマンスの問題についてはまだ混乱しています1000回のための10のメソッドを呼び出すことが可能です –