我在非常大系统上遇到了一个问题,由于服务器性能和资源的原因,它不能有例外管理。相反,系统架构师决定返回Nothing,例如,数据库连接器什么也没找到。系统在VB.NET中编码。
我知道返回和传递Nothing通常是一个不好的习惯因为各种原因,例如违反了一些可靠的原则,代码中的一些噪音用于空检查和添加脆弱性,因为NullPointerExceptions可以传递 - 通过。所有这一切都伴随着返回Nothing的事实可能意味着很多东西(它崩溃了吗?它遇到了一个依赖的错误吗?,我的参数是否有效?...)Robert的书“清洁代码” C.马丁(或鲍勃叔叔)甚至谈到它说这不是一个好习惯。
问题Alternatives to returning NULL不仅陈旧,而且还没有给出任何好的选择,而不是返回Nothing。
还有Null Object pattern。根据我对这个主题的看法,社区似乎分为两个阵营,那些阻止其使用的人说它只是隐藏了一个错误的设计,而那些人认为它实际上是一个解决方案。
我只是想提出一个干净,专业和可靠的解决方案。什么是一个很好的替代方案,意味着干净的编码和设计,而不是太多的宝贵的服务器资源?由于我在专业领域相当新,我想知道大师/专家会做什么以及他/她将如何面对这个问题。我正在寻找
非常感谢 (对不起,英语不是主要语言)
答案 0 :(得分:2)
正如您所指出的,使用Null Object模式隐藏错误是一个坏主意。以下是如何正确使用Null对象的一些示例:Null Object Pattern
在许多情况下,Null Object不是正确的解决方案,因为它只是替换null(Nothing)引用。您可以使用Special Case Pattern来携带更多信息并在客户端上生成丰富的响应。
如果两者都不正确,如果无法生成有效对象,则可以选择返回空集合而不是对象。以下是详细信息:Option Functional Type
希望这会有所帮助。请记住,任何对象都不应隐藏错误。如果操作失败,则抛出异常。但是,如果失败的操作是常规情况(即不例外),那么尝试设计代表负面情景的特殊情况。