首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Validate()方法上抛出异常或更好地返回bool值是一个好习惯吗?

这个问题涉及到了软件设计的最佳实践和异常处理。在Validate()方法上抛出异常或更好地返回bool值是一个好习惯吗?这取决于具体的场景和需求。

在一些情况下,抛出异常可能更适合。例如,如果Validate()方法的调用者需要知道验证失败的具体原因,或者需要根据验证失败的原因采取不同的处理措施,那么抛出异常可能是更好的选择。异常可以提供更详细的错误信息,使得调用者可以更容易地识别和处理错误。

而在另一些情况下,返回bool值可能更适合。例如,如果Validate()方法的调用者只需要知道验证是否成功,而不需要关心具体的失败原因,那么返回bool值可能是更好的选择。这样可以使代码更简洁,也可以减少不必要的错误处理代码。

总的来说,在Validate()方法上抛出异常或更好地返回bool值是否是一个好习惯,取决于具体的场景和需求。在选择时,需要考虑到代码的可读性、可维护性和可扩展性,以及调用者的需求和期望。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

一个完整的TDD演练案例(三)

例如: new InputValidator("1 2 3 5").validate(); 存在两个错误: 错误判断了输入的生命周期。什么内容应该放在构造函数中作为参数?...你觉得输入应该作为构造函数?如果我要验证另一条输入应该怎么办?再创建一个InputValidator对象? 违反了阅读直觉。validate()方法验证谁?验证空?...然而,这里的需求明确地表示了,如果输入不符合要求,就不允许创建该Answer,而是抛出异常。所以,这里的部分验证逻辑创建Answer之前就应该存在,当然就不应该由Answer承担了。...对于表达一种错误规则来说,如果你将其看做一种业务规则,最好的表达方式采用自定义异常,除非这门语言允许返回两个(例如Go语言支持返回多个字,但并不支持异常)。...现在,InputValidator类又提供了validate()方法,且其中部分逻辑相同的。实现时,应该如何重构现有代码?

89170
  • .NET 异常处理的动作策略(Action Policy)

    基于动作策略(Action Policy)的异常处理使开发人员可以为异常处理制定策略,简单的说,动作策略只是一些可重复使用的一个装饰器,可以很容易应用与方法调用。...,这里我给你介绍一种更好的基于动作策略(Action Policy)的异常处理,这个异常处理策略的的原理充分利用C#的闭包Action,这个园子里有很多讨论: 《你不常用的c#之三》...MyRetryPolicy(() => LongRunningDbCall()); MyRetryPolicy(() => AnotherFragileCall()); // 有一个参数和返回的调用...细心的你注意到了红色的代码中使用一个Retry Action Policy,出错的时候重试三次,每次之间间隔时间依次加长,重试了三次都不成功才抛出异常,这是一个很有用的功能,比如在数据库发生死锁的时候。...动作策略还支持一种断路器,我们的生活中有一种很常见的电路断路器,发生电涌过载的时候保护我们的电路,我们的分布式系统中也会碰到类似的现象。

    72270

    Swift中使用error来控制流程

    代码的控制流本质函数和声明的执行顺序,及代码执行路径。...抛出可空的 可选,作为Swift的重要特征,处理空的数据时可被合法的忽略;它也经常被用作给定函数的来源样板控制流程中。 下面,重写了从app中bundle加载、调整图片的方法。...例如,修改loadImage(named:)方法返回一个非空的image抛出ImageError.missing: private func loadImage(named name: String...好消息,我们随时可以回去用可空即使我们用了抛出方法。所需要到只是调用抛出方法时用try?关键字,然后我们就得到了可选: let optionalImage = try?...} 通过上面的代码,可以构建一个validators,验证不通过时,抛出一个错误。

    73131

    Controller层代码这么写,简洁又优雅!

    ,违背单一职责原则 可能在多个业务中都抛出一个异常,导致代码重复 各种异常反馈和成功响应格式不统一,接口对接不友好 改造 Controller 层逻辑 统一返回结构 统一返回类型无论项目前后端是否分离都是非常必要的...,方便对接接口的开发人员更加清晰知道这个接口的调用是否成功(不能仅仅简单返回是否为 null 就判断成功与否,因为有些接口的设计就是如此),使用一个状态码、状态信息就能清楚了解接口调用情况 /...现在处理这个问题有两种方式 beforeBodyWrite 方法处进行判断,如果返回 String 类型就对 Result 对象手动进行转换成 JSON 字符串,另外方便前端使用,最好在 @RequestMapping...,但是异常返回结构和正常返回结构不一致 自定义异常是为了后面统一拦截异常时,对业务中的异常有更加细颗粒度的区分,拦截时针对不同的异常作出不同的响应 而统一拦截异常的目的一个是为了可以与前面定义下来的统一包装返回结构能对应...、每一个 DTO 的校验规则,可以很明确看到每一个 Controller 方法返回的是什么数据,也可以方便每一个异常应该如何进行反馈 这一套操作下来后,我们能更加专注于业务逻辑的开发,代码简洁、功能完善

    78320

    【Java】已解决Spring框架中的org.springframework.dao.DuplicateKeyException异常

    唯一索引冲突:除了主键之外,表中可能还有其他具有唯一性约束的字段(如通过唯一索引实现的字段),插入的数据在这些字段已经存在。...} 在这个示例中,如果user对象的email字段的已经存在于数据库中,那么调用userRepository.save(user)方法时就会抛出DuplicateKeyException异常。...= null) { // 处理冲突,例如抛出自定义异常返回错误消息 throw new RuntimeException("User with email "...如果存在,则抛出一个运行时异常;如果不存在,则正常保存用户。 五、注意事项 数据校验:插入数据之前进行校验一个好习惯,可以避免因违反数据库约束而导致的异常。...错误处理:当遇到DuplicateKeyException其他异常时,应该根据业务逻辑进行合适的错误处理,而不是简单忽略抛出未处理的异常

    25710

    python接口自动化34-json校验神器jsonschema

    比如当接口返回一个token,这个token不是固定的,就算取到了也不好断言,这时候我们希望断言的token的类型字符串,长度固定多少位。...校验, 跟assert断言一个意思 validate(instance=result, schema=schema) validate 校验成功时候,不会有报错 JSON 数据校验失败,抛出 jsonschema.exceptions.ValidationError...异常 schema 模式本身有问题,抛出 jsonschema.exceptions.SchemaError 异常 schema语法 参数 描述 $schema 表示该JSON Schema文件遵循的规范...title 为该JSON Schema文件提供一个标题 description 关于该JSON Schema文件的描述信息 type 表示待校验元素的类型(例如,最外层的type表示待校验的一个JSON...null None boolean bool string str

    2.2K20

    Controller层代码这么写,简洁又优雅!

    统一返回类型无论项目前后端是否分离都是非常必要的,方便对接接口的开发人员更加清晰知道这个接口的调用是否成功(不能仅仅简单返回是否为 null 就判断成功与否,因为有些接口的设计就是如此)。...处理 @ResponseBody 标注方法返回 解析 @RequestBoyd 标注参数的方法 resolveArgument。...自定义异常与统一拦截异常 原来的代码中可以看到有几个问题: 抛出异常不够具体,只是简单把错误信息放到了 Exception 中 抛出异常后,Controller 不能具体根据异常做出反馈 虽然做了参数自动校验...而统一拦截异常的目的一个是为了可以与前面定义下来的统一包装返回结构能对应,另一个我们希望无论系统发生什么异常,Http 的状态码都要是 200 ,尽可能由业务来区分系统的异常。...、每一个 DTO 的校验规则,可以很明确看到每一个 Controller 方法返回的是什么数据,也可以方便每一个异常应该如何进行反馈。

    33920

    shiro源码篇 - shiro的session的查询、刷新、过期与删除,你值得拥有

    启动校验定时任务     还记得AbstractValidatingSessionManager中createSession方法?...} }   通过捕获doValidate()抛出异常来剔除过期的不合法的session,并将异常接着往上抛,供上层统计过期数量。...异常   validate方法如下 public void validate() throws InvalidSessionException { //check for stopped:...;     3、校验session的时候,抛出异常,将其捕获,从sessionDao中删除对应的session,并使过期数量自增1 删除   夹杂在过期定时任务中,与过期同时进行的,利用的异常机制;...,所session已过期不合法,则抛出对应的异常,上层通过捕获异常从sessionDao中删除session   3、不只定时任务做session的校验,session的基本操作都在sessionManager

    2.3K20

    Java如何优雅实现接口数据校验

    在工作中写过Java程序的朋友都知道,目前使用Java开发服务最主流的方式就是通过Spring MVC定义一个Controller层接口,并将接口请求返回参数分别定义一个Java实体类中,这样Spring...实际Java开发中目前普通使用的Bean数据校验工具"hibernate-validator",它是一个hibernete独立的jar包,所以使用这个jar包并不需要一定要集成Hibernete框架...层中通过Spring提供的@Validated注解可以自动实现数据Bean的绑定校验,如果数据异常则会统一抛出校验异常!...此外,如果对这样的枚举,我们还想在约束定义中直接匹配代码中的枚举定义,以更好统一接口参数与业务逻辑的枚举定义。那么这种情况下,我们还可以自己扩展定义相应约束注解逻辑。...除了上面直接在Controller层使用@Validated进行绑定数据校验外,在有些情况,例如你的参数对象中的某个字段一个复合对象,或者业务层的某个方法所定义的入参对象也需要进行数据合法性校验,那么这种情况下如何实现像

    1.1K30

    iOS - 关于 KVC 的一些总结

    非对象处理 KVC支持基础数据类型和结构体,使用KVC进行赋值取值的时候,会自动非对象和对象之间进行转换。...当进行取值如valueForKey:时,如果返回非对象,会使用该初始化一个NSNumber(用于基础数据类型)NSValue(用于结构体)实例,然后返回该实例。...我们可以消息接收者类中实现validate:error:的方法来自定义逻辑返回YESNO。...如果+accessInstanceVariablesDirectly方法返回NO也执行⑥。 ⑤ 如果取到的一个对象指针,即获取的对象,则直接将对象返回。  ...如果取到的一个NSNumber支持的数据类型,则将其存储NSNumber实例并返回。   如果取到的不是一个NSNumber支持的数据类型,则转换为NSValue对象, 然后返回

    1.9K10

    Laravel 5.0 之 ValidatesWhenResolved

    说明: 如果一个请求校验失败的话, 路由方法其实没有真正取消. FormRequest 只是抛出一个 HTTP 异常, 该异常随后以 JSON 格式返回, 或者被重定向到处理异常的页面....理论上来说, 你不实现这个接口, 而只是简单控制器的构造函数中进行校验并抛出异常也是一样的. 但是借助这个接口, 我们可以保持代码清洁, 并且可以一个命名的方法中来执行校验....事实, 对于实现这个方法的类, 我们只需要知道一点, 就是当 IOC 容器解析到它的时候, 会调用 validate() 这个方法....如你所见, 这里没有用到什么神奇的东西, validate() 方法是否返回 true 或者 false 并不重要....但我暂时没有找到合适的用例, 所以我先简单略过这部分. 你可以自己尝试... 但是我想不出有什么理由值得这样去做, 呵呵. 真实案例 你肯定不会像上面的例子里那样去随机抛出异常.

    1K50

    C++11——引入的新关键字

    auto关键字主要有两种用途:一变量定义时根据初始化表达式自动推断该变量的类型,二声明定义函数时作为函数返回的占位符,此时需要与关键字decltype连用。...auto不能用来声明函数的返回。但如果函数有一个尾随的返回类型时,auto可以出现在函数声明中返回位置。...这种情况下,auto并不是告诉编译器去推断返回类型,而是指引编译器去函数的末端寻找返回类型。在下面这个例子中,函数返回类型operator+操作符作用在T、U类型变量返回类型。...,则返回为false,那么func5有可能会抛出异常,否则返回为true,func5为noexcept(true),不会抛出异常。...一个表达式可以被计算为 bool string (字符串),如果这个表达式的为 false ,那么编译器会出现一个包含特定字符串的错误,同时编译失败。如果为 true 那么没有任何影响。

    1.4K50

    从新手到专家:如何用Python编写配置文件

    实际,著名的《十二要素应用》[1]已经为我们回答了这个问题: 一个验证应用程序的所有确配置是否均已正确从代码中分解出来的试金石:代码库是否随时可以不损害任何证书的情况下开源。...如果你仍然不知道哪种配置文件更好的选择,但在Python的上下文中考虑的话,那么答案将是 YAML INI。大多数Python程序和软件包都很好接收 YAML 和 INI。...Python包管理系统(例如pippoetry)中已经大量使用了它。但如果配置文件中的嵌套层级过多,则YAML会是更好的选择。以下文件看起来像INI,但每个字符串都带有引号。...如果给它这样的.env文件,并且想访问DEBUG,则得到None作为返回而不会抛出异常。...但是它不支持__post_init__方法来进行更高级的检查,正如我一篇文章[12]中所述。

    6.8K43

    关于.NET异常处理的思考

    因为对于实现一个功能来说,实现功能的核心代码一样的,可能只是写法优化而已,但是实现某一个操作使用的类来说,这一点绝大多数时候一样的。...5.隐藏实现细节来维持契约:        有时可能需要捕捉一个异常并重新抛出一个不同的异常,这样可以维系方法的契约,抛出的心异常类型应该是一个具体的异常。...异常的处理中,我们可以一个线程捕获异常一个线程中重新抛出异常异常抛出时,CLR会在调用栈中向上查找与抛出异常类型匹配的catch块。...一个try块至少有一个关联的catch块finall块。               (2).catch块:包含的响应一个异常需要执行的代码。catch关键字后的圆括号中的表达式捕获类型。...: /// /// 检查字符串空的空的,并抛出一个异常 /// /// <param name

    89150

    C++中的max函数:用法、技巧与注意事项

    探索C++中的max函数 C++编程中,我们经常需要比较两个多个以找出其中的最大。幸运的,C++标准库为我们提供了max函数,它能够方便比较两个返回较大的一个。...注意,如果容器为空,std::max_element将返回end()迭代器,因此使用返回的迭代器之前检查它是否有效一个好习惯。...异常安全性:如果比较操作复制操作可能抛出异常,那么使用std::max可能需要额外的异常处理逻辑来确保程序的健壮性。...返回的使用:std::max返回两个参数中的一个(即较大的那个)。...结论 C++中的max函数一个强大而灵活的工具,它允许我们轻松比较和查找最大。通过适当地使用重载和模板技术,我们可以扩展它的功能以处理各种类型和情况。

    1.1K10

    里氏替换原则(LSP)

    简单来说,就是使用基类的地方,如果全部换成子类的对象,也并不会产生不期望的结果。 面向对象有三个基本特性:封装、继承和多态。本人认为,里氏替换原则是指导工程师更好去实现继承。...动态角度: 在运行时实际因为多态原理,实际调用的子类QueueSQS的方法GetTask,可以认为子类对象动态替换了父类 上述例子,目前看是没有违背里氏替换原则,也是我们常见的使用场景。...语义的变化 继续以上述例子为例,队列的调用者面向QueueAbstract去编程的,那么在编程的时候一定要搞清楚一个接口的语义,比如这里的GetTask,语义我们从参数,返回,行为等几个方面定义,因为我们就以返回为例...假设我们定义: 拿不到数据,GetTask返回nullptr,而不是抛出异常。...,对于返回抛出异常以及内部属性的变化,都应该属于父类定义的行为的子集。

    64020

    一期Go群问答-并发控制-数据竞争-错误与异常

    单独用一个线程来接受数据,go这个东西就是个语言,怎么好用怎么来,虽然一直推channel,但只要实现需求。 sync.Map为什么没有len测长度方法?...追问:sync.Map 这个Range 方法有个返回bool用来返回是否range空map?range如何处理碰到到空的?...熊:这个bool传入函数的返回,调用完以后如果Map空的,实际就什么也没做,不会给返回。里面给迭代,你传入的函数处理下k v的行了。没办法判断是否为空。...异常处理 go你们项目中都是怎么异常处理的呀,java抛出自定义有业务异常然后全局异常捕获? 张朝胤:Golang不是if err=nil?全局try catch怎么处理? Mike:fmt....国玮:嗯嗯,实际编码中,确实是这样的,不过 Dave 认为,如果你对错误不关心,那么你也不应该关心它返回。可能提醒我们要谨慎吧!

    40130

    一期每日一GO群分享-flag、viper、协程池、异常处理

    单独用一个线程来接受数据,go这个东西就是个语言,怎么好用怎么来,虽然一直推channel,但只要实现需求。 sync.Map为什么没有len测长度方法?...追问:sync.Map 这个Range 方法有个返回bool用来返回是否range空map?range如何处理碰到到空的?...熊:这个bool传入函数的返回,调用完以后如果Map空的,实际就什么也没做,不会给返回。里面给迭代,你传入的函数处理下k v的行了。没办法判断是否为空。...异常处理 go你们项目中都是怎么异常处理的呀,java抛出自定义有业务异常然后全局异常捕获? 张朝胤:Golang不是if err=nil?全局try catch怎么处理? Mike:fmt....国玮:嗯嗯,实际编码中,确实是这样的,不过 Dave 认为,如果你对错误不关心,那么你也不应该关心它返回。可能提醒我们要谨慎吧!

    35920

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券