0

iOSアプリケーションでボタンタップを処理する、一見単純なコードの次の部分があります。

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

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

Robert C. Martin によるクリーン コードの原則に完全に従うには、同じ行に ButtonTapFactory または何かが必要ですか?

4

1 に答える 1

1

動作の異なる 2 種類のボタンがあります (戻るボタンと数字ボタン)。このコードをきれいにするには、タイプごとに 2 つのアクションを用意する必要があります。タイプは、ボタン内のテキストの内容によって決定するのではなく、意味的に意味のある方法で決定する必要があります。(つまり、サブクラス)。さらに、アクション メソッドには、実際のロジックを実行する別のメソッドへの呼び出しのみを含める必要があります。他のすべてはテストできません。コード内:

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

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

このようにして、UI コードが干渉することなく、単体テストでメソッドを呼び出すことができます。への呼び出しからラベルを削除したことにも注意してください_tapDigitButton。数字はラベルから解析されるべきではありませんが、tagプロパティを使用するなど、より意味的に安定した方法で渡される必要があります。

于 2012-10-21T10:34:26.183 に答える