다음과 같은 긴 방법이 있다고 가정하십시오.
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
이 더 유지 관리 가능하고 읽기 쉬운 지, 왜 그런가요?