例如,我的班级方法应在使用前验证输入值。建议,方法的两个参数是:
int start
int count
我们应该验证start
不小于0(应为0或更大),count
的范围应为0..999。如果这两个参数有效,我们将继续执行我们的方法,否则将引发异常BillComInvalidRangeException
:
public class BillComInvalidRangeException : Exception
{
const string invalidRangeMessage = "The range is not valid. 'Start' should be greater than 0, 'Count' in range 0..999.";
public BillComInvalidRangeException(int start, int count) : base($"{invalidRangeMessage} Passed 'Start' : {start}, 'Count' : {count}")
{
}
}
我想遵循SRP并创建一个名为ValidateListRange
的类。我可以通过3种方法来实现它:
验证方法中的值:
public bool Validate(int start, int count)
{
return !(start < 0
|| count < 0
|| count > 999);
}
然后使用:
var validateObject = new ValidateListRange();
if (!validateObject.Validate(start, count))
throw new BillComInvalidRangeException(start, count);
使用静态方法验证值:
public static bool Validate(int start, int count)
{
return !(start < 0
|| count < 0
|| count > 999);
}
然后使用:
if (!ValidateListRange.Validate(start, count))
throw new BillComInvalidRangeException(start, count);
具有相同功能的记录更短。那么我们的ValidateListRange
类就是简单的Util类,它可以在项目周围包含许多类似这样的方法(验证,生成等)。
但是对于非静态类,我们有一个巨大的好处-我们可以使用接口,然后传递必要的validate对象,而无需更改我们的项目源代码。例如,将来我们应该验证9999,而不是999,我们可以编写ValidateListRange类的新实现。如有必要
哪种方法更好?还是其他方法?
答案 0 :(得分:1)
Oleg,我不确定您是否会抛出该特定异常,但是您是否考虑过?: