0

我在 iOS 应用程序中有以下看似简单的代码处理按钮点击:

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

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

要完全遵循 Robert C. Martin 的 Clean Code 原则,我是否需要 ButtonTapFactory 或同一行中的其他东西?

4

1 回答 1

1

您有两种类型的按钮,具有不同的行为(后退按钮和数字按钮)。要使此代码干净,您应该为每种类型设置两个操作。类型不应该由按钮内的文本内容决定,而是通过语义上有意义的方式来决定。(即子类)。此外,动作方法应该只包含对执行实际逻辑的另一个方法的调用。其他一切都是不可测试的。在代码中:

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

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

这样,您可以让单元测试调用您的方法,而不会干扰您的 UI 代码。另请注意,我从对 的调用中删除了标签_tapDigitButton。不应从标签中解析数字,而应以语义更稳定的方式传递,例如使用tag属性。

于 2012-10-21T10:34:26.183 回答