1

我在这里陷入了僵局。

假设我有模块 A,它公开了一些返回对象的方法,而模块 B 使用了模块 A 中的所述方法。模块 A 将遇到必须返回 Nothing 的情况。

问题是:我当然不想返回 Nothing。很多很多书籍、顶级程序员和启发式方法会告诉你。但是,由于大量使用模块 A,不允许使用异常。这显然会扼杀性能。

最后,我们不想使用自动实例化的对象,并且必须检查内部状态以了解它是否实际上是 Nothing(如 check-null ......)

对于模块 A 来说,公开它可以返回一些空的(或什么都没有)并且对于像模块 B 一样使用它的每个人都需要检查这种情况(比如签名异常 try-catch),有什么替代方法?

任何帮助都会非常感激!我几乎没有解决方案,我想做一些干净的事情,能够进化而不会导致不必要的行为和错误。谢谢

4

2 回答 2

1

这是高度基于意见的。我个人认为这对于不返回任何内容的方法是完全可以接受的

Dim user as MyUser = myClass.GetUser(id)
If user Is Nothing Then 
    ' Do something when GetUser fails to retrieve a user
End If

有些人喜欢做的其他常见事情是boolean从每个函数返回

Dim user as MyUser 
If Not myClass.GetUser(id, user) Then
    ' Do something when GetUser fails to retrieve a user
End If

这两种方法都是完全有效的,您可以根据当前需要使用一种或另一种。任何人都不太接受并且有充分理由的一件事是基于异常的编程。

于 2015-10-28T20:06:18.147 回答
0

通常不鼓励 null/nothing 的原因是因为它强制客户端进行 null 检查,这是一种不好的做法。

但是,这取决于具体情况,返回 Nothing 是否对您的问题域有意义。

另一种更面向 OOP 的方法是使用 NullObject 模式——然后客户端可以安全地调用返回的对象上的方法,而不必担心它是否实际上是 Nothing。

于 2015-10-28T20:13:36.147 回答