【问题标题】:The better technique in this refactoring case?在这种重构案例中,更好的技术是什么?
【发布时间】:2015-04-10 12:57:07
【问题描述】:

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

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,即,我会返回它,但要更改的变量不止一个,而且都是大函数的局部变量,从中我正在取出这段代码 sn-p。

还有其他建议吗?

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多