1

簡単な構造を想像してみましょう:

public void onClick(View view) {
    switch (view.getId()) {
        case R.id.btn_first: {
            // some code
        }
            break;
        case R.id.btn_second: {
            // some code
        }
            break;
        case R.id.btn_third: {
            // some code
        }
            break;
        // and so on
    }
}

これは、さまざまなボタンのクリックを処理する簡単なコードです。switchしかし、ボタンの数が増えるにつれて、ブロックのサイクロマティックな複雑さが増します。メソッドの循環的な複雑さを軽減するために、このコード構造を表す別の方法はありonClick()ますか? 前もって感謝します。

4

3 に答える 3

2
public void onClick(View view) {
    for (ClickHandler handler : allHandlers()) {
        if (handler.supports(view.getId())) {
            handler.onClick(view);
        }
    }
}

interface ClickHandler {
    boolean supports(int viewId);
    void onClick(View view);
}

ClickHandlerブランチごとにを実装し、allHandlers()それらのリストを作成します。

于 2013-02-01T14:04:59.717 に答える
0

可能です (たとえば、エグゼキュータを使用したハッシュマップなど) が、私の意見では、コードの品質が低下します。循環的複雑度が低いことは、高品質のコードに適していますが、最終的な目標は、低循環的複雑度ではなく、高品質で保守可能なコードであるべきです。

于 2013-02-01T14:00:46.093 に答える