リファクタリングは、コードの外部の動作を変更せずに、コードの内部構造を変更することによって、コードを作成した後にコードを改善するプロセスです。 1. リファクタリングが必要な場合 1. コード内に重複したコードがある。クラス内に重複したコード ブロックがある場合、それを新しい独立したメソッドに洗練する必要がある。異なるクラスに同じコードがある場合は、それを修正する必要がある。新しいクラスに洗練されました。 2
リファクタリングは、コードの外部の動作を変更せずに、コードの内部構造を変更することによって、コードを作成した後にコードを改善するプロセスです。
1. 再建が必要になるのはいつですか
1. コードに重複したコードがあります。
クラス内に重複したコード ブロックがある場合は、新しい独立したメソッドに抽出する必要があります。異なるクラスに同じコードがある場合は、新しいクラスに抽出する必要があります。2. 大きすぎるクラスと長すぎるメソッド。
大きすぎるクラスは、多くの場合、不合理なクラス抽象化の結果として発生し、コードの再利用率が低下します。メソッドが長すぎる場合は、それを複数の小さなメソッドに分割する方法を見つける必要があります。
メソッド内のコードの行数が増えるほど、理解するのが難しくなります。メソッドあたりのコードは 20 ~ 25 行のみにすることをお勧めします。しかし、1 行目から 10 行目のほうが合理的であるという人もいます。これらは単なる個人的な好みであり、厳格なルールはありません。抽出メソッドは、最も一般的なリファクタリング手法の 1 つです。メソッドが長すぎる場合、またはメソッドの目的を説明するコメントがすでに必要な場合は、抽出メソッドを適用できます。メソッドの長さはどれくらいであるべきかという質問が常に聞かれますが、長さは問題の根源ではありません。複雑なメソッドを扱う場合、すべてのローカル変数を追跡するのが最も複雑で時間がかかりますが、メソッドを抽出することで時間を節約できます。 Visual Studio を使用してメソッドを抽出すると、ローカル変数を追跡し、それらを新しいメソッドに渡したり、メソッドの戻り値を受け取ったりするのに役立ちます。
3. 一回の動きで全身に影響を与える修正。
小さな関数を変更したり、小さな関数を追加すると、コードの地震が引き起こされます。これは、設計の抽象化が十分に理想的ではなく、関数コードが分散しすぎていることが原因である可能性があります。
クラス A は、B の内部データにアクセスするために、クラス B のメソッドを呼び出す必要が多すぎます。2 つのクラスはまったく分離すべきではないでしょうか?4. クラス間で必要なコミュニケーションが多すぎる。
5. 過剰結合された情報チェーン。中間層は疎結合を実現するためにコードでよく使用されますが、中間層が多すぎて層ごとに接続されている場合は、中間層の数を減らすことを検討する必要がありますか?
6. 同様の機能を持つクラスまたはメソッド。
7. 不完全なデザイン。8. 必要なコメントが不足しています。
9. クラスの人数を常に管理する
過大なクラスは、あまりにも多くのことを実行しようとしています。これは、オブジェクト指向設計原則 SOLID の S である単一責任原則 (SRP) に違反します。
なぜ 2 つの責任を別のクラスに分けなければならないのでしょうか?なぜなら、あらゆる責任が変化の中心だからです。要件が変更されると、その変更はその責任を担当するクラスに反映されます。クラスが複数の責任を負っている場合、その変更には複数の理由が考えられます。クラスに複数の責任がある場合、これらの責任は結合されます。そして、特定の責任が変更されると、この階級が他の責任を果たす能力が弱まったり、制限されたりする可能性があります。この結合は非常に脆弱な設計をもたらし、責任が変わると予期せず壊れる可能性があります。
書き換えとコード仕様の問題に分類できるのは以下の2点です。
10. パラメータが多すぎることを避ける
クラスを宣言して複数のパラメータを置き換えます。すべてのパラメータを含むクラスを作成します。一般的に言えば、これはより優れた設計であり、この抽象化は非常に価値があります。
11. 複雑な表現を避ける
複雑な式は、その背後に何らかの隠された意味があることを意味し、属性を使用してこれらの式をカプセル化し、コードを読みやすくすることができます。
リーリー2. C# VS2010 でのいくつかのリファクタリング
1.抽出方法の再構築
2. 名前の変更と再構築
3. カプセル化フィールドの再構築 4. 抽出インターフェースの再構築
5. パラメータの再構築を削除します
6. パラメータを再配置して再構築します