c# - 与异常相比,结果对象是处理失败的更简洁的方法吗?
问题描述
我将此问题移至softwareengineering.stackexchange.com,因为它更适合那里。
我正在观看 Vladimir Khorikov 的以下视频,该视频建议“重构远离异常” pluralsight.com - Applying Functional Principles in C# - Refactoring Away from Exceptions,而不是使用 Result 对象。您还可以在此处找到有关它的博客:enterprisecraftsmanship.com - 函数式 C#:处理失败、输入错误
总而言之,建议是更喜欢返回结果对象然后抛出异常。异常应该仅用于指示错误。这种方法的论据如下:
- 抛出异常的方法不是“诚实的”。通过查看方法的签名,您无法识别方法是否会失败。
- 异常处理增加了很多样板代码。
- 当异常用于控制流程时,它具有“goto”语义,您可以在其中跳转到特定的代码行。
另一方面,可以忽略返回值(至少在 C# 中),而异常则不能。
朝这个方向重构现有的企业应用程序是个好主意吗?还是一种不太激进的方法更好?(我相信通过使用类似方法的返回类型来确保避免Vexing 异常ValidateUserInput(string input)
是有意义的)
解决方案
推荐阅读
- single-sign-on - Ping Federate 抛出错误:cvc-complex-type.2.4c:验证 SAML 响应时
- android - 反应原生,在模拟器或设备上调试?
- java - Java删除数组中的冗余项
- dart - 如何让 AppBar 图标触发渲染?
- mysql - 为什么 sum 不计算期望值?
- react-native - 平面列表未在状态更改时更新
- c# - C# 将客户端重新连接到服务器
- amazon-s3 - 无法删除孤立的 AWS s3 存储桶
- javascript - 我们如何在 Electron 中将消息主进程发送到渲染器进程
- python - 如何使用python在nextion上发送数据