无法使用异常时返回 Nothing (Null) 的替代方法
Alternatives to returning Nothing (Null) when unable to use exceptions
我在 非常 的大系统上工作时遇到问题,由于服务器性能和资源的原因,无法进行异常管理。相反,系统架构师决定 return Nothing,例如,当数据库连接器什么也找不到时。系统编码为VB.NET.
我知道return由于各种原因,return传递 Nothing 通常是一个坏习惯,例如违反了一些可靠的原则,空检查代码中的一些噪音以及增加的脆弱性,因为可以传递的 NullPointerExceptions。除了 returning Nothing 之外,所有这些都意味着很多事情(它崩溃了吗?它的依赖项之一是否遇到错误?我的参数有效吗?...)这本书 "Clean code" 来自 Robert C. Martin(或 Uncle Bob)甚至谈到它说这不是一个好的做法。
问题 Alternatives to returning NULL 不仅陈旧,而且没有给出任何好的替代方案来代替 return 什么都不做。
还有 Null Object pattern。从我读到的关于这个主题的内容来看,社区似乎分为两个阵营,那些不鼓励使用它的人说它只是隐藏了一个错误的设计,而那些说它实际上是一个解决方案。
我只想提出一个干净、专业、可靠的解决方案。在不占用太多宝贵服务器资源的情况下,有什么好的替代方案可以暗示干净的编码和设计?由于我在专业领域还很陌生,所以我想知道 guru/expert 会做什么以及 he/she 会如何面对这个问题。我正在寻找
非常感谢
(抱歉,英语不是主要语言)
正如您所指出的,使用空对象模式来隐藏故障不是一个好主意。以下是一些如何正确使用空对象的示例:Null Object Pattern
在许多情况下,Null Object 不是正确的解决方案,因为它只是替换了 null (Nothing) 引用。您可以使用 Special Case Pattern 来携带更多信息并在客户端产生丰富的响应。
如果两者都不对,如果无法生成有效对象,您可以选择return一个空集合而不是对象。详情如下:Option Functional Type
希望这对您有所帮助。请记住,故障不应被任何物体隐藏。如果操作失败,则抛出异常。但是,如果失败的操作是常规情况(即不是例外情况),则尝试设计代表负面情况的特殊情况。
我在 非常 的大系统上工作时遇到问题,由于服务器性能和资源的原因,无法进行异常管理。相反,系统架构师决定 return Nothing,例如,当数据库连接器什么也找不到时。系统编码为VB.NET.
我知道return由于各种原因,return传递 Nothing 通常是一个坏习惯,例如违反了一些可靠的原则,空检查代码中的一些噪音以及增加的脆弱性,因为可以传递的 NullPointerExceptions。除了 returning Nothing 之外,所有这些都意味着很多事情(它崩溃了吗?它的依赖项之一是否遇到错误?我的参数有效吗?...)这本书 "Clean code" 来自 Robert C. Martin(或 Uncle Bob)甚至谈到它说这不是一个好的做法。
问题 Alternatives to returning NULL 不仅陈旧,而且没有给出任何好的替代方案来代替 return 什么都不做。
还有 Null Object pattern。从我读到的关于这个主题的内容来看,社区似乎分为两个阵营,那些不鼓励使用它的人说它只是隐藏了一个错误的设计,而那些说它实际上是一个解决方案。
我只想提出一个干净、专业、可靠的解决方案。在不占用太多宝贵服务器资源的情况下,有什么好的替代方案可以暗示干净的编码和设计?由于我在专业领域还很陌生,所以我想知道 guru/expert 会做什么以及 he/she 会如何面对这个问题。我正在寻找
非常感谢 (抱歉,英语不是主要语言)
正如您所指出的,使用空对象模式来隐藏故障不是一个好主意。以下是一些如何正确使用空对象的示例:Null Object Pattern
在许多情况下,Null Object 不是正确的解决方案,因为它只是替换了 null (Nothing) 引用。您可以使用 Special Case Pattern 来携带更多信息并在客户端产生丰富的响应。
如果两者都不对,如果无法生成有效对象,您可以选择return一个空集合而不是对象。详情如下:Option Functional Type
希望这对您有所帮助。请记住,故障不应被任何物体隐藏。如果操作失败,则抛出异常。但是,如果失败的操作是常规情况(即不是例外情况),则尝试设计代表负面情况的特殊情况。