我的API定义如下
bool IsValid()
现在,我想修改API,以便如果返回值为false,那么我需要额外的 验证验证失败的原因 我正在寻找一个优雅的想要解决问题......以下是我的选择
选项1:
bool IsValid(ref string errorMessage)
仅当结果为false时才更新errorMessage
选项2:
class Result<T>
{
bool Succeeded;
T Argument;
}
Result<string> IsValid()
选项3:
void Validate();
//throw an exception if it invalid, just return if succeeded.
我对上面列出的任何选项都不满意。所以,想知道是否有任何我可能不知道的优雅解决方案
问候 ģ
答案 0 :(得分:4)
您的可能错误消息是固定的吗?在这种情况下,我将在枚举中定义它们,然后创建一个返回枚举类型值的Validate()
方法。这样做的另一个好处是,如果您需要向用户显示消息,您可以轻松使用本地化消息。
答案 1 :(得分:3)
我会去
int IsValid();
string GetErrorString(int id);
或者如果可以的话,更好的是:
ValidCode IsValid();
string GetErrorString(ValidCode code);
其中ValidCode是枚举
答案 2 :(得分:1)
如果你必须使用“string isValid()”,那么方法会在成功时返回null或空字符串,否则会出现某种错误信息。
我个人永远不会这样做。让API做不止一件事会增加复杂性。
答案 3 :(得分:0)
如果您使用的是动态类型语言,则可以执行以下操作:
def IsValid():
if condition:
return (True, "")
else:
return (False, "error message")
但是,我真的会选择异常方法。它是标准的,可以在失败代码之上的任何级别进行处理。
答案 4 :(得分:0)
以防万一你想坚持使用选项3:在错误输入验证失败的情况下,validate()不应抛出异常。在特殊情况下应该抛出异常,而不是在您可能期望错误输入的情况下抛出异常。所以我会按照以下方式设计它
ValidationResult Validate()
其中ValidationResult可能是
class ValidationResult
{
bool IsValid;
string Message;
}
验证方法只应在无法验证时抛出异常,例如:当它必须在数据库中查找值但无法建立连接时。
编辑:哇。没看到帖子的日期......猜猜我有点晚了......