函数链接取决于布尔结果

时间:2010-06-07 09:16:39

标签: asp.net vb.net design-patterns

这实际上只是一个效率问题。我很想知道人们用它来处理这种情况是否有更高效或逻辑的方式。

在我的asp.net应用程序中,我正在运行一个脚本来生成一个新项目,我在顶层的代码如下所示:

Dim ok As Boolean = True
    ok = createFolderStructure()
    If ok Then ok = createMDB()
    If ok Then ok = createProjectConfig()
    If ok Then ok = updateCompanyConfig()

我创建一个布尔值,每个函数返回一个布尔结果,此链中的下一个函数只有在前一个函数成功时才会运行。我这样做是因为asp.net应用程序将继续运行页面生命周期,除非存在未处理的异常,并且如果链中的某些内容出错,我不希望整个应用程序被搞砸(有很多复制和删除文件等..在本例中)。

我只是想知道其他人如何处理这种情况? vb.net单行if语句非常简洁,但我想知道是否有更好的方法?

3 个答案:

答案 0 :(得分:2)

通常,函数不应该根据其结果返回true / false - 这被认为是老式的。 try / catch块在这里更好,其中函数在发生错误时抛出异常。当然,假设错误只发生在特殊时刻:

Try
    createFolderStructure()
    createMDB()
    createProjectConfig()
    updateCompanyConfig()
    ''// ...
Catch ioExeption as IOException
    ''// handle it
End Try

答案 1 :(得分:2)

您可以将布尔值全部放在一起

If createFolderStructure() Then
If createMDB() Then
If createProjectConfig() Then
If updateCompanyConfig()

但我必须同意使用例外是处理这些情况的更好方法。

答案 2 :(得分:1)

Kobi告诉你如何做到这一点。如果你真的需要使用布尔函数的结果,那么你可以使用 AndAlso运算符链接它们。

Dim ok As Boolean
ok = createFolderStructure() 
    AndAlso createMDB()
    AndAlso createProjectConfig()
    AndAlso updateCompanyConfig()

这些表达式被懒惰地评估,即如果一个函数返回false,则不评估表达式的其余部分。