在函数参数验证中抛出异常是一种好习惯,就像我使用TryPassNameValidation函数一样,如果:
我还考虑过返回一个验证对象,就像这个answer中描述的那样,但这种编程方式让我想起了GoLang functions handle errors的方式。我认为发明例外是为了阻止我们这样做。
{-# LANGUAGE ExtendedDefaultRules #-}
答案 0 :(得分:1)
我发现这段代码很难理解哪些与你的目标背道而驰。验证是通过嵌套调用和非显而易见的控制流(例外)完成的。我发现每种方法开头的常用if ... throw;
序列更容易理解。部分是因为几乎所有的验证代码都是这样的。
TryPassingStructureNameUnique
应使用Any
编写。完成后,它适合一行,并可用于上述if ... throw;
验证模式。
bool nameIsTooLong
事情真的很冗长。这些条件微不足道。他们应该只使用if ... throw;
模式。
除此之外,我认为这个设计是一个有效的选择。这不是一个容易的选择。如果我能帮忙的话,我不会这样做。
如果有效性是您的核心概念,请考虑将每个Structure
包装在ValidatedStructure
包装器类中。验证施工。通过视觉检查,您可以了解给定的Structure
是否已经过验证。
答案 1 :(得分:0)
这取决于API的含义。
如果您指的是一个业务逻辑,您可以预测无效输入,例如空用户名,那么我就不会抛出任何异常。
如果您指的是一个框架(整个团队共享的库),您希望向用户表明其无效用法,因为API无法使用无效参数,那么我会抛出异常。