当我想检查参数的正确值时的圈复杂度
Cyclomatic Complexity when I want to check the correct values of the arguments
我有一个包含 3 个参数的参数,我想确保来自参数的数据是正确的,所以我有类似的东西:
- 如果 param1 为 null 抛出异常 ArgumentNullException
- if param1.Property < 0 抛出异常
if para1.Property > 100 抛出异常
如果 param2 为 null 抛出异常
- 如果param2.Property为空则抛出异常
- if param2.Property 不是 > 0 抛出异常
等等。
本例我的圈复杂度为7,看来6到10之间很难维护,所以建议5以下。
我想创建一个方法来检查每个参数是否正确,但如果我有 3 个参数和 3 个方法,复杂度是 4。所以我只能使用一个循环,或者如果更多...
所以我的问题是,我想确保我从参数接收到的数据是正确的,如果一切正确,则执行该工作,但我不知道如何检查我的参数并实施我的代码并将复杂度保持在 6 以下。
谢谢。
就个人而言,每当我想验证参数时,我都会准确评估需要哪些类型的验证(空值检查、最小/最大值、日期范围等)。完成此操作后,我在静态实用程序中创建方法 class 接受用于验证的参数 return 指示成功的 bool 值。
以下是我在我的项目中用于验证的三种方法:
public static bool NullCheck(params object[] parameters)
{
foreach (object parameter in parameters)
if (parameter == null)
return false;
return true;
}
public static bool MinCheck(int minimum, params int[] parameters)
{
foreach (int parameter in parameters)
if (parameter < minimum)
return false;
return true;
}
public static bool MaxCheck(int maximum, params int[] parameters)
{
foreach (int parameter in parameters)
if (parameter > maximum)
return false;
return true;
}
使用方法如下:
if (!NullCheck(obj1, obj2, obj3, obj4)) throw new ArgumentNullException("Invalid params");
else if (!MinCheck(5, int1, int2, int3, int4)) throw new Exception();
else if (!MaxCheck(8, int5, int6, int7, int8)) throw new Exception();
编辑
如果要求调用者知道哪个参数无效,而不是 returning 布尔值,它可以 return a Tuple<bool, object[]>
其中 bool
表示成功/失败方法和 object[]
包含任何无效对象。
示例实施如下:
public static Tuple<bool, object[]> NullCheck(params object[] parameters)
{
var failures = new List<object>();
foreach (object parameter in parameters)
if (parameter == null)
failures.Add(parameter);
if (failures.Count == 0)
return new Tuple<bool, object[]>(true, null);
else
return new Tuple<bool, object[]>(false, failures.ToArray());
}
我有一个包含 3 个参数的参数,我想确保来自参数的数据是正确的,所以我有类似的东西:
- 如果 param1 为 null 抛出异常 ArgumentNullException
- if param1.Property < 0 抛出异常
if para1.Property > 100 抛出异常
如果 param2 为 null 抛出异常
- 如果param2.Property为空则抛出异常
- if param2.Property 不是 > 0 抛出异常
等等。
本例我的圈复杂度为7,看来6到10之间很难维护,所以建议5以下。
我想创建一个方法来检查每个参数是否正确,但如果我有 3 个参数和 3 个方法,复杂度是 4。所以我只能使用一个循环,或者如果更多...
所以我的问题是,我想确保我从参数接收到的数据是正确的,如果一切正确,则执行该工作,但我不知道如何检查我的参数并实施我的代码并将复杂度保持在 6 以下。
谢谢。
就个人而言,每当我想验证参数时,我都会准确评估需要哪些类型的验证(空值检查、最小/最大值、日期范围等)。完成此操作后,我在静态实用程序中创建方法 class 接受用于验证的参数 return 指示成功的 bool 值。
以下是我在我的项目中用于验证的三种方法:
public static bool NullCheck(params object[] parameters)
{
foreach (object parameter in parameters)
if (parameter == null)
return false;
return true;
}
public static bool MinCheck(int minimum, params int[] parameters)
{
foreach (int parameter in parameters)
if (parameter < minimum)
return false;
return true;
}
public static bool MaxCheck(int maximum, params int[] parameters)
{
foreach (int parameter in parameters)
if (parameter > maximum)
return false;
return true;
}
使用方法如下:
if (!NullCheck(obj1, obj2, obj3, obj4)) throw new ArgumentNullException("Invalid params");
else if (!MinCheck(5, int1, int2, int3, int4)) throw new Exception();
else if (!MaxCheck(8, int5, int6, int7, int8)) throw new Exception();
编辑
如果要求调用者知道哪个参数无效,而不是 returning 布尔值,它可以 return a Tuple<bool, object[]>
其中 bool
表示成功/失败方法和 object[]
包含任何无效对象。
示例实施如下:
public static Tuple<bool, object[]> NullCheck(params object[] parameters)
{
var failures = new List<object>();
foreach (object parameter in parameters)
if (parameter == null)
failures.Add(parameter);
if (failures.Count == 0)
return new Tuple<bool, object[]>(true, null);
else
return new Tuple<bool, object[]>(false, failures.ToArray());
}