Что лучше в этом случае рефакторинга?

Мне нужно провести некоторый рефакторинг (на самом деле это ОЧЕНЬ МНОГО, но этот небольшой шаг будет очень полезен для всего процесса). Итак, допустим, у меня есть этот фрагмент кода:

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

Он находится в теле большой функции, и я хочу вынести его в отдельную функцию. Итак, мне было интересно, будет ли лучше передавать universalNode и Type по значению и просто присваивать им значения без необходимости возвращать что-либо? Это сработает или это рискованно?

Если бы я работал только с Type, то есть я бы просто вернул его, но это более 1 переменная, которая изменяется, и обе являются локальными переменными для большой функции, из которой я беру это фрагмент кода.

Может быть, есть другие предложения?


person Syspect    schedule 10.02.2015    source источник


Ответы (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
person SysDragon    schedule 10.02.2015