2012-04-25 2 views
0

I 아이폰 OS 응용 프로그램에서 버튼 탭을 처리 코드의 다음, 단순 해 보이는 부분이 있습니다클린 코드 원칙에 따라 버튼 탭을 처리하려면 어떻게합니까?

- (IBAction)tapKeypadButton:(UIButton *)sender { 
    NSString *buttonLabel = sender.titleLabel.text; 

    if ([buttonLabel isEqualToString:@"<"]) { 
     [self _tapBackButton]; 
    } else { 
     [self _tapDigitButton:buttonLabel]; 
    } 
} 

완전히 저도 같은에서 ButtonTapFactory 또는 뭔가를해야합니다, 로버트 C. 마틴 클린 코드 원칙을 따르을 선?

+2

특히 어떤 원칙을 따르려고합니까? 왜 당신은'ButtonTapFactory'가 필요하다고 생각하니? –

답변

1

다른 동작 (뒤로 버튼과 숫자 버튼)의 두 가지 유형의 버튼이 있습니다. 이 코드를 깨끗하게 만들려면 각 유형에 대해 두 가지 조치가 있어야합니다. 유형은 버튼 내부의 텍스트 내용에 의해 결정되어서는 안되며 의미 론적으로 의미있는 방식으로 결정됩니다. (즉, 서브 클래스). 또한, 동작 메서드는 실제 논리를 수행하는 다른 메서드에 대한 호출 만 포함해야합니다. 다른 모든 것은 테스트 할 수 없습니다. 코드에서 :

- (IBAction) tapBackButton:(id) sender 
{ 
    [self _tapBackButton:sender]; 
} 

- (IBAction) tapDigitButton:(id) sender 
{ 
    [self _tapDigitButton:sender]; 
} 

이 방법을 사용하면 UI 코드를 방해하지 않고 메서드를 호출하는 단위 테스트를 수행 할 수 있습니다. _tapDigitButton으로 전화 한 라벨을 삭제했음을 유의하십시오. 숫자는 레이블에서 파싱되어서는 안되지만보다 의미 론적으로 안정된 방식으로 전달되어야합니다 (예 : tag 속성 사용).

관련 문제