[Coding]関心領域は切り分けてメソッド設計する

関心領域が異なるパラメータをメソッド引数に入れるのは、あまり良いコードとは言えません。

例えばデータを複数のバリデータでチェックするケースで、そこで使うバリデータのメソッド設計がこんな感じのコードがありました。

namespace App1
{
    class Validator
    {
        public static Boolean isValidXx<T>(T targetValue, Boolean validateResult)
        {
            Boolean result=true;
            if(result){
                //targetValueのチェックをして結果を返す
            }

            return result && validateResult;
        }

        public static Boolean isValidYy<T>(T targetValue, Boolean validateResult)
        {
            Boolean result = true;
            if (result)
            {
                //targetValueのチェックをして結果を返す
            }

            return result && validateResult;
        }
    }

    class Program
    {

        static void Main(string[] args)
        {
            int target=1;
            Boolean validateResult;

            validateResult = Validator.isValidXx<int>(target, true);
            validateResult = Validator.isValidYy<int>(target,validateResult);

        }

    }
}

意図としてはわからなくもないのですが、バリデータメソッドの関心領域はtargetValueの評価です。
しかし、上記コードは他バリデータの結果も考慮してしまっていて、関心領域が混ざってしまっています。

バリデータの関心はtargetValueを評価することで、複数のバリデータの結果に関心があるのはバリデータのユーザーのはずですので、下記の様に書くのが正しいと言えます。

namespace App1
{
    class Validator
    {
        public static Boolean isValidXx<T>(T targetValue)
        {
            Boolean result=true;
            if(result){
                //targetValueのチェックをして結果を返す
            }

            return result;
        }

        public static Boolean isValidYy<T>(T targetValue)
        {
            Boolean result=true;
            if(result){
                //targetValueのチェックをして結果を返す
            }

            return result;
        }
    }

    class Program
    {

        static void Main(string[] args)
        {
            int target=1;
            Boolean validateResult;

            validateResult = Validator.isValidXx<int>(target);
            validateResult &= Validator.isValidYy<int>(target);

        }

    }
}

バリデータはtargetValueの評価のみを行い、複数バリデータの結果が欲しいMainが複数のチェック結果を取りまとめています。

コメントを残す