关于异常的再思考
上次和JGTM'2004 [MVP]讨论异常,他说“尽可能用逻辑流程代替异常捕获“。我也同意
但考虑下面的场景:
transfer(Account from ,Account to, int amount);
上面的这个函数是两个帐号转帐用的,假如发现from帐号没有钱了,怎么处理呢?
发现from和to帐号是同一个帐号,该怎么处理呢?类似情况难道都用返回值来告诉调用者吗?显然不合适,这样又回到结构化编程的老路了,调用者不得不做n多的判断……
Windows大牛(Jeffery Richter)告诉我们的答案是:“抛出异常“,是这样吗?
按他的解释,异常是对程序接口假设的一种违反
说道Jeffery Richter我心里也有些郁闷,在他的经典著作(Applied Microsoft .NET Framwork)中的Exception一章中提到:在设计类库的时候要严格遵守他所提到的n多处理异常的原则,但又说应用开发人员则可以完全背离这些原则,从而设定自己的策略。这话说得很对,可是,像我们既要开发数据访问层,又要开发业务逻辑层,说不定还有业务外观层,那些是类库,那些是应用?
那些应该使用这些原则?所谓应用开发和类库开发不过是相对的概念。相对是相对了,可是我的数据访问层和业务逻辑层是按照类库来开发,还是按照应用来开发?!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端