`
悲剧了
  • 浏览: 144279 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

抛出异常还是约定返回值

阅读更多
具体场景如下:
现在要执行一个业务操作方法,这个业务方法执行要有N个前置条件满足才能执行

现在使用统一MVC架构,

调用者要收到反馈,知道没ok,根据反馈进行一些列的后续操作,比如通知用户去哪完善,怎么完善


那么怎么处理?

第一种:N个前置条件的检验,放到action里面做,如果不满足返回相关页面之类的

优点:开发直接简单
缺点:思维直接控制层充斥着这样的业务逻辑,很乱,复用性不强,换个action执行这个,还要再组装

第二种:N个前置条件和业务方法在一块组成一个service方法,直接调用就ok了
作为有追求的coder,我们肯定要第二种,那么第二种问题来了

问题:

这一系列走一流程,写成一个方法完成,那么前置条件到底是第一个不满足,还是第N-1个不满足,怎么得到反馈

抛出异常来通知相关情况

好处:不满足方法的约定,直接给出异常,
缺点:感觉上犯了异常代替了正常流程的问题,不是很确定

通过返回值来通知相关情况但这种检测条件满足否
有点:性能方面,约定一些列的final String 或者  Eunm ,也算直观吧
缺点:方法返回值承载了太多东西,通常不是要直接返回结果

大家有什么看法?转头什么的扔吧
分享到:
评论

相关推荐

    36丨 实战二(上):程序出错该返回啥?NULL、异常、错误码、空对象?1

    当一个函数遇到无法正常处理的情况时,抛出异常是一种常见的处理方式。例如,`UnknownHostException`是Java中的一个异常类型,用于表示无法解析主机名。 函数在正常运行时,返回值类型通常是明确的,例如,一个函数...

    NET设计规范-.NET约定、惯用法与模式.part2

    7.1 抛出异常 171 7.2 为抛出的异常选择合适的类型 175 7.2.1 错误消息的设计 176 7.2.2 异常处理 177 7.2.3 对异常进行封装 182 7.3 标准异常类型的使用 184 7.3.1 Exception与SystemException 184 ...

    NET设计规范-.NET约定、惯用法与模式.part1

    7.1 抛出异常 171 7.2 为抛出的异常选择合适的类型 175 7.2.1 错误消息的设计 176 7.2.2 异常处理 177 7.2.3 对异常进行封装 182 7.3 标准异常类型的使用 184 7.3.1 Exception与SystemException 184 ...

    华为JAVA编码规范.pdf

    3. 对于非 RuntimeException,即 throws 子句声明会抛出的异常,必须在方法的注释中标明。 华为JAVA编码规范提供了详细的编码风格、命名约定、代码组织和注释要求,以确保编写的代码清晰、可读、易维护。同时,规范...

    Java中main()方法浅析.docx

    当`main()`抛出异常时,JVM会捕获并打印堆栈跟踪,然后终止程序执行。如果`main()`方法上声明了`throws Exception`,那么它能够抛出任何类型的异常,包括受检查的异常。 4. **使用`main()`方法**: `main()`方法...

    Spring MVC异常处理机制示例详解

    在 DispatcherServlet 中对 HandlerExceptionResolver 的处理是在 processHandlerException 方法中进行的,该方法将遍历所有的 HandlerExceptionResolver,直到找到一个可以处理异常的 Resolver,否则将抛出异常。...

    C#异步编程几点需要注意的地方

    主调方在对异步方法所返回的Task对象做await操作时,该对象若已处在faulted状态,系统则会将执行异步方法的过程中所发生的异常抛出,反之,若Task尚未执行到抛出异常的那个地方,则主调方的执行进度会暂停在await...

    .NET设计规范(完整版)

    12. **异常安全的异常处理**:抛出异常时,确保不破坏程序状态,避免在析构函数中抛出异常,并考虑在可能抛出异常的方法中提供无异常的替代途径。 以上只是.NET设计规范中的一部分关键知识点,完整版的规范还包含更...

    在c#中调用c++类库

    2. 异常处理:C++的异常不能直接在C#中抛出,需要检查返回值并根据错误代码手动抛出异常。 3. 空间管理:C++的动态内存管理(如`new`和`delete`)在C#中不适用,使用`Marshal.AllocHGlobal`和`Marshal.FreeHGlobal`...

    Google C 编程规范

    5. **错误处理**:避免使用`assert`进行常规错误检查,而应该使用返回值或抛出异常。`assert`只用于调试阶段,确保程序内部逻辑正确。 6. **内存管理**:推荐使用智能指针(如`std::unique_ptr`和`std::shared_ptr`...

    C#调用C++(包括C++的opencv)

    为了保持一致性,C++侧可以抛出异常并将其转换为错误码,然后在C#中捕获错误码并抛出相应的异常。 7. **测试和调试**: - 编译并运行C#程序,测试C++函数的调用。使用Visual Studio的调试器跨语言调试,检查C++和...

    C++编程风格指南(中英文都有,doc)

    - 避免在析构函数和catch块中抛出异常,这可能导致程序难以恢复。 6. **内存管理**: - 使用智能指针(如unique_ptr、shared_ptr和weak_ptr)管理动态分配的对象,减少手动new和delete的使用。 - 避免内存泄漏,...

    C++写动态库C#调用

    - **异常处理**: C++可以抛出异常,而C#使用结构化异常处理。如果C++ DLL抛出异常,C#可能无法捕获。考虑使用错误代码返回值或自定义异常处理机制。 - **资源管理**: 跨语言调用时,管理内存和资源需要格外小心。...

    c++编程规范1

    构造函数抛出异常是危险的,需要谨慎处理。 6. **`class`与`struct`的区别**:`struct`默认为`public`,但在C++中,两者主要区别在于默认访问权限。避免在`struct`中定义成员函数。 7. **运算符重载**:不推荐过度...

    python-coding-standards-of-google.rar_编程规范 python

    - **使用`raise`重新抛出异常**:在处理异常后,如果需要继续抛出异常,使用`raise`而不直接抛出新的异常。 5. **注释和文档字符串(Comments and Docstrings)** - **模块文档字符串**:每个模块的顶部应有一个...

    编码约定(code guide line)

    - 文档注释应包括对该元素的功能、参数、返回值以及可能抛出的异常的描述。 ##### 4.2 行内注释(In-line Comments) - 行内注释用于解释代码中特定部分的目的或逻辑。 - 应避免过多使用行内注释,因为良好的命名和...

    Google_C++编码规范中文版

    4. **异常处理**:应明确处理异常,避免异常传播,同时避免在资源管理函数中抛出异常。在可能抛出异常的代码块前后使用`try-catch`结构,确保资源得到正确释放。 5. **模板与泛型编程**:谨慎使用模板,特别是对于...

    Google C++ 编程规范

    - 避免使用`assert`来处理运行时错误,而应抛出异常或返回错误码。 - 异常安全:在可能导致资源泄漏的地方,确保异常发生时能正确清理。 5. **类型安全** - 使用强类型枚举(`enum class`)代替传统枚举,防止...

    Findbus检查结果问题总结

    如果try块中没有可能抛出异常的代码,但却使用了catch语句,则可能会掩盖其他潜在问题。 **示例代码:** ```java try { // 没有可能抛出异常的代码 } catch (Exception e) { // ... } ``` **建议修改:** 删除...

    Java关键字及其作用

    - `throws`:声明方法可能抛出的异常,将异常处理交给调用者。 5. 包和模块系统: - `package`:用于组织和命名空间管理,便于代码重用和避免命名冲突。 - `import`:引入其他包中的类或接口,便于使用。 6. ...

Global site tag (gtag.js) - Google Analytics