私がこのような長い方法を持っているとしましょう:
public void SomeLongMethod()
{
// Some task #1
...
// Some task #2
...
}
このメソッドには、個別のメソッドまたはローカル関数に移動する必要がある繰り返し部分はありません。
長いメソッドはコードのにおいだと思っている人はたくさんいます(私を含めて)。また、私は#region
ここで(s)を使用するのが好きではありません。なぜこれが悪いのかを説明する非常に人気のある答えがあります。
しかし、このコードをメソッドに分割すると
public void SomeLongMethod()
{
Task1();
Task2();
}
private void Task1()
{
// Some task #1
...
}
private void Task2()
{
// Some task #1
...
}
次の問題が発生します。
単一のメソッドによって内部的に使用される定義でクラス定義スコープを汚染しているため、どこかに文書化する必要が
Task1
あり、そのTask2
内部のみを対象としてSomeLongMethod
います(または、私のコードを読むすべての人がこのアイデアを推測する必要があります)。単一の
SomeLongMethod
メソッド内で一度だけ使用されるメソッドの汚染IDEオートコンプリート(Intellisenseなど)。
public void SomeLongMethod()
{
Task1();
Task2();
void Task1()
{
// Some task #1
...
}
void Task2()
{
// Some task #1
...
}
}
これには、個別のメソッドの欠点はありませんが、これは元のメソッドよりも(少なくとも私にとって)見栄えがよくありません。
どちらのバージョンがSomeLongMethod
あなたにとってより保守可能で読みやすいですか、そしてなぜですか?