3

StyleCop によるファイルに関する警告を受け取りました。

  • 警告 1 CR0005: ファイルが 508 行と非常に長いです。500行以下にするリファクタリングを検討してください。

  • 警告 2 CR0002: メソッドが長すぎます。長さは 58 行です。50 行以下にするリファクタリングを検討してください。

皆さんはどのようにコードを変更していますか? このためのベストプラクティスは何ですか? コードをより小さなものに分割する考えがありません。コードが非常に複雑になることを恐れています。

だから、助けてください^_^!

ナム。

4

7 に答える 7

6

Martin の Fowler の著書「Refactoring: Improving the Design of Existing Code」と Daniel Arsenovski の「Professional Refactoring in C# & ASP.NET」を読む必要があります。

于 2010-07-19T13:17:44.443 に答える
4

クラスは多くのことをしようとしますか? それぞれがより具体的でより明確な目的を持つ複数の小さなクラスに分割できますか? その場合は、複数のクラスにリファクタリングします。

理解しやすくするために、メソッドからいくつかのコードを独自のメソッドに抽出できますか? もしそうなら、そうしてください。

上記の変更のいずれかにより、コードが理解しにくくなりますか? その場合は、StyleCop を無視してください。これは、コードを読みやすくするための単なる一般的なツールであることを忘れないでください。あなたの状況には意味をなさない推奨事項が少なくともいくつかあることはほぼ確実です.

于 2010-07-19T13:18:47.937 に答える
1

私は警告を抑制し、より重要なことを心配します。

ファイルやメソッドのサイズにこのような恣意的な制限を課すことに意味があるかどうかはわかりません。50や500という数字そのものではなく、そういう数字があるという事実。それはどこから来たのですか?50 行は読み取り可能と見なされるのに、58 行は読み取り可能と見なされないのはなぜですか?

ここで示したように、これらの指標に集中することは非生産的であり、実際の問題から注意をそらす可能性があります。おそらく、時間をかけたほうがよいかもしれませんし、適切な設計原則がより適切に提供されるかもしれません。たとえば、懸念事項の適切な分離などを確実にするためです。任意のサイズ基準を満たすために行とメソッドを分割するのではなく、論理的に何をすべきかに応じて行とメソッドを分割します。

于 2010-07-19T13:24:56.163 に答える
0

クラスや構造体、またはインターフェースの定義を2つ以上のソースファイルに分割することができます。各ソースファイルにはクラス定義のセクションが含まれており、アプリケーションのコンパイル時にすべての部分が結合されます。たとえば、ここでは「bar」クラスがfoo1.csとfoo2.csに分割されています。

foo1.cs

public partial class Bar
{
    public void bat()
    {
    }
}

foo2.cs

public partial class Bar
{
    public void baz()
    {
    }
}

詳細については、部分クラス定義(C#プログラミングガイド)を参照してください。

于 2010-07-19T13:53:47.063 に答える
0

これは、StyleCop に付属するルールではありません。それはあなたの会社が社内で開発したものですか?ルールの背後にある理論的根拠に興味があります。500 行はかなり厳しい制限のようです。

于 2010-07-21T03:53:10.493 に答える
0

他の人は、リファクタリングについて言及し、クラスを分割して 1x の責任 (OOP の SOLID ルールの一部) を実行することにも焦点を当てています。でも; あなたのクラスがまだ 500x 行で、1つの責任を果たしている場合、あなたはそれほどひどい立場にはありません。

コード ファイルに XML ドキュメントと空白が含まれている場合、500x 行はわずかに大きくなります (これは、その動作によって異なります)。私の「単純な」クラスの多くは、完了すると約 350 行になります。小さいほど良いですが、簡潔であることは本当にあなたが望むものです.

コードがどのように見えるべきかを理解するためのもう 1 つの良い本は、Robert C. Martin の Clean Codeです。よく考え抜かれたクラスとメソッドを設計する上で、多くの優れたルールが規定されています。

于 2010-07-19T13:27:04.473 に答える
0

「メソッドの抽出」リファクタリングは、メソッドを短くする (別のメソッドに入れることによって) のに非常に便利です。これは 2010 年に行われたと思います (いくつかのコードを強調表示し、右クリックすると、メニューのどこかにあるはずです)。

ファイルを分割する最良の方法は (ファイル内にクラスが 1 つしかない場合)、機能の一部を別のクラスに抽出することです。Google 'Extract Class' で検索すると、いくつかの情報が見つかります。

@Justinが言うように、これを行うと、処理するファイル/メソッドが増えるため、最初はより複雑に見えるかもしれませんが、各ファイル/メソッドが小さいため、一度に処理するものは少なくなります. 一部の(尊敬される)人々は、これを本当に遠くまで考えています。慣れるには少し時間がかかりますが、コードは (ほぼ間違いなく) より優れたものになります。

于 2010-07-19T13:25:16.930 に答える