这个重构案例中更好的技术?

时间:2015-02-10 13:13:06

标签: vb.net refactoring pass-by-value

我需要做一些重构(实际上它很多,但这个小步骤对整个过程非常有帮助)。所以,假设我有这段代码:

If xmlDoc.SelectSingleNode("/dang") IsNot Nothing Then
    universalNode = xmlDoc.SelectSingleNode("/dang")
    Type = "dang"
ElseIf xmlDoc.SelectSingleNode("/nang") IsNot Nothing Then
    universalNode = xmlDoc.SelectSingleNode("/nang")
    Type = "nang"
ElseIf xmlDoc.SelectSingleNode("/lang") IsNot Nothing Then
    universalNode = xmlDoc.SelectSingleNode("/lang")
    Type = "lang"
ElseIf xmlDoc.SelectSingleNode("/tang") IsNot Nothing Then
    universalNode = xmlDoc.SelectSingleNode("/tang")
    Type = "tang"
ElseIf xmlDoc.SelectSingleNode("/xtang") IsNot Nothing Then
    universalNode = xmlDoc.SelectSingleNode("/xtang")
    Type = "xtang"
End If

它是一个大功能的主体,我想把它带到一个单独的功能。所以,我想知道的是,通过值传递universalNodeType并将它们分配给它们是否更好,而不需要返回任何内容?这样做会好还是有风险?

如果它只是我正在处理的Type,那么我只会返回它,但它不止一个变量被改变,并且它们都是大函数的局部变量,从中我拿出这段代码片段。

还有其他建议吗?

1 个答案:

答案 0 :(得分:1)

你可以通过引用(而不是值)将变量传递给函数,这不是一个坏习惯,应该可以工作:

Public Sub MyFunc(ByRef node As MyNode, ByRef typ As String) 
    node = ...
    typ = ...
End Sub

或者您可以返回一些复杂的数据持有者:

Public Class MyParams
   Public node As MyNode
   Public typ As String
End Class

Public MyParams MyFunc() 
    Dim result As New MyParams()
    result.node = ...
    result.typ = ...
    Return result
End Sub