関心領域が異なるパラメータをメソッド引数に入れるのは、あまり良いコードとは言えません。
例えばデータを複数のバリデータでチェックするケースで、そこで使うバリデータのメソッド設計がこんな感じのコードがありました。
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が複数のチェック結果を取りまとめています。