0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

画面の表示値を利用することの問題点- 13[C#リファクタリングサンプル]

Last updated at Posted at 2017-05-04

##画面の表示値を利用することの問題点
元の値があるのに、表示名をロジックに組み込んだコードを見かけることがある。このコードの問題点は表示が変わった場合に、ロジックの修正をしなければいけない点である。サンプルコードで具体的に示す。

##サンプルコード
サンプルコードでは区分値(IsOk)がYesの場合、○を画面表示している。設計書に○の場合に太字にするという記載がある場合、作成されるコードは以下のようなコードになる。
尚、画面から区分値および、その表示値は取得できるものとする。

        /** 区分値 **/
        private enum IsOk
        {
            Yes,
            No
        }

        public void Main()
        {
            // NG 画面表示に対して実装している。表示が○でなくなると修正が必要。
            if (GetDisplay() == "○")
            {
                SetBold();
            }
        }

        private IsOk GetValue()
        {
            // 画面に設定されたフラグ値を取得する。ビルドのため、固定値になっている。
            return IsOk.Yes;
        }

        private string GetDisplay()
        {
            // 画面に設定されたフラグに対する表示値を取得する。ビルドのため、固定値になっている。
            return "○";
        }

        private void SetBold()
        {
            // 文字を太字にする。コードは省略。
        }
java
    /** 区分値 **/
    private enum IsOk {
        YES, NO,
    }

    public void main() {

        if (getDisplay() == "○") {
            setBold();
        }
    }

    private IsOk getValue() {
        // 画面に設定されたフラグ値を取得する。ビルドのため、固定値になっている。
        return IsOk.YES;
    }

    private String getDisplay() {
        // 画面に設定されたフラグに対する表示値を取得する。ビルドのため、固定値になっている。
        return "○";
    }

    private void setBold() {
        // 文字を太字にする。コードは省略。
    }

##問題点
サンプルコードの場合、表示を○から◎にすると、if文の中を修正する必要がある。画面の表示から切り離すためには、区分値を使用すればよい。

##リファクタリング後

        /** 区分値 **/
        private enum IsOk
        {
            Yes,
            No
        }

        public void Main()
        {
            // OK 表示にかかわらずYesの場合は動作する。画面表示の影響は受けない。
            if (GetValue() == IsOk.Yes)
            {
                SetBold();
            }
        }

        private IsOk GetValue()
        {
            // 画面に設定されたフラグ値を取得する。ビルドのため、固定値になっている。
            return IsOk.Yes;
        }

        private string GetDisplay()
        {
            // 画面に設定されたフラグに対する表示値を取得する。ビルドのため、固定値になっている。
            return "○";
        }

        private void SetBold()
        {
            // 文字を太字にする。コードは省略。
        }
java
    /** 区分値 **/
    private enum IsOk {
        YES, NO,
    }

    public void main() {

        if (getValue() == IsOk.YES) {
            setBold();
        }
    }

    private IsOk getValue() {
        // 画面に設定されたフラグ値を取得する。ビルドのため、固定値になっている。
        return IsOk.YES;
    }

    private String getDisplay() {
        // 画面に設定されたフラグに対する表示値を取得する。ビルドのため、固定値になっている。
        return "○";
    }

    private void setBold() {
        // 文字を太字にする。コードは省略。
    }
##まとめ 画面表示値をそのまま使用するのではなく、もととなった値を使用する。少なくとも画面表示に依存する部分を減らすことができる。

前の記事(条件分岐後の処理が冗長な場合)

次の記事(例外を無視する)

目次

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?