我编写了一个许可系统,它检查许可证的不同方面(例如开始日期、结束日期、系统限制等)。例如,我在许可证中有一个限制,即您不能创建超过 5 个用户帐户。我有一个方法(例如 bool NumberOfUsersIsCoveredByLicense),它调用一个常用方法(例如 bool IsValidLicense)。IsValidLicense 将检查许可证文件是否被操纵、过期等。
现在的问题是错误输出。如您所见,我的方法具有布尔返回值,因此我知道存在许可证违规,但我不知道许可证检查的哪一部分失败。所以我在想,如何返回一个值,它描述了许可证的哪一部分被违反了。最简单的方法是返回一个字符串值,我会做类似的事情
var licenseValidationResult = NumberOfUsersIsCoveredByLicense(4)
if(licenseValidationResult.Equals(String.Empty))
{
//Success
}
else
{
ErrorMessage = GetErrorMessageByErrorCode(licenseValidationResult);
}
因此,如果许可证有效,我将返回一个空字符串,如果它无效,它将以 error1;error2;error3 之类的形式返回错误代码。我实际上不确定这是否是一个好的解决方案。另一种可能性是枚举,如下所示:
[Flags]
public enum LicenseErrorCodes
{
None = 0x00,
LicenseExpired = 0x01,
LicenseManipulated = 0x02,
MaxNumberOfUsersReached = 0x04,
[...]
}
但同样,我不确定这是否是一个不错的解决方案。是否有解决此类问题的“通用方法”/最佳实践?