나는 우리의 레거시 시스템 직장에서 다음과 같은 기능을 많이 보았습니다.
bool todo = false;
if(cond1)
{
... // lots of code here
if(cond2)
todo = true;
... // some other code here
}
if(todo)
{
...
}
즉, 함수는 두 부분으로 구성됩니다. 첫 번째 부분은 일종의 처리 (잠재적으로 루프, 부작용 등 포함)와 "todo"플래그를 설정할 수있는 방법을 수행합니다. 두 번째 부분은 "todo"플래그가 설정된 경우에만 실행됩니다.
그것은 일을하는 아주 추한 방법처럼 보입니다. 실제로 이해하는 데 걸린 시간의 대부분은 깃발 사용을 피하기 위해 리팩토링 될 수 있다고 생각합니다. 그러나 이것이 실제 반 패턴입니까, 나쁜 생각입니까, 아니면 완벽하게 수용 가능한가요?
첫 번째 명백한 리팩토링은 두 가지 방법으로 잘라내는 것입니다. 그러나 내 질문은 로컬 플래그 변수를 만들어 잠재적으로 여러 위치에 설정 한 다음 나중에 그것을 사용하여 다음 코드 블록을 실행할지 여부를 결정 해야하는지 (현대 OO 언어)가 필요한지 여부에 관한 것입니다.
["blacklisted-domain","suspicious-characters","too-long"]
몇 가지 이유가 적용되었음을 보여주는 목록으로 끝날 수 있습니다 .