2011-07-26 139 views
0

我有以下代碼,我的老闆要我減少代碼行來做這個工作。在這個vb.net代碼中可以減少代碼行嗎?

Private Function getClientSheetNames(Optional ByVal type As String = "all") As List(Of String) 
    If type = "extra" Then 
     Return clientExtraSheetNames 
    End If 
    Dim prev, curr As New List(Of String) 
    For Each name In clientMonthlySheetNames 
     curr.Add(name + " (" + currMonth + ")") 
    Next name 
    If type = "currMonth" Then 
     Return curr 
    End If 
    For i = 1 To clientMonthlySheetNames.Count - 1 
     prev.Add(clientMonthlySheetNames(i) + " (" + prevMonth + ")") 
    Next 
    If type = "prevMonth" Then 
     Return prev 
    End If 
    If type = "monthly" Then 
     Return curr.Union(prev).ToList 
    End If 
    Return clientExtraSheetNames.Union(curr.Union(prev)).ToList 
End Function 

Private Function getDevSheetNames(Optional ByVal type As String = "all") As List(Of String) 
    If type = "extra" Then 
     Return devExtraSheetNames 
    End If 
    Dim sheetNames, prev, curr As New List(Of String) 
    For Each name In devMonthlySheetNames 
     curr.Add(name + " (" + currMonth + ")") 
    Next name 
    If type = "currMonth" Then 
     Return curr 
    End If 
    For Each name In devMonthlySheetNames 
     prev.Add(name + " (" + prevMonth + ")") 
    Next name 
    If type = "prevMonth" Then 
     Return prev 
    End If 
    If type = "monthly" Then 
     Return curr.Union(prev).ToList 
    End If 
    sheetNames.Add(devExtraSheetNames(0)) 
    sheetNames.AddRange(curr.Union(prev).ToList) 
    sheetNames.AddRange(devExtraSheetNames.GetRange(1, devExtraSheetNames.Count - 1)) 
    Return sheetNames 
End Function 

我無法弄清楚如何切割線條並具有相同的功能!

是否有任何vb.net構造可以通過更好的實現來減少loc?

我可以從getClientSheetNames和getDevSheetNames調用一個新的函數來實現代碼resue嗎?

我可以在可能的新函數中引入多態嗎?

任何性能改進都非常值得歡迎!

請幫忙!!

+0

「我的僱主希望我減少代碼以完成這項工作。」 - 爲什麼? –

+0

嗯,我不知道!他認爲我做了一個非常糟糕的實現,所以如果我減少LOC,我會改進邏輯。 –

+0

改善邏輯與減少代碼行數有些不同(也是更重要的)要求(儘管有時是相關的) –

回答

4

函數應該做一件事。這兩個功能都執行五個獨立的,不相關的任務。畫一個流程圖,你會看到你幾乎結束了五個不同的功能。因此將每個功能分成五個單獨的功能。

Function getAllClientSheetNames() As List(Of String) 
Function getExtraClientSheetNames() As List(Of String) 
Function getCurrentMonthClientSheetNames() As List(Of String) 
Function getPreviousMonthClientSheetNames() As List(Of String) 
Function getMonthlyClientSheetNames() As List(Of String) 

他們關聯最深的是,getAll~包括getCurrentMonth~getPreviousMonth~,你可以從getAll~調用。

這會改善邏輯和可讀性。它可能(沒有gaurantees)甚至減少你的LoC。

+0

那麼,我同意..但我想保持它在邏輯上1功能獲取sheetNames。我不想擺弄3-4個功能來獲取我的sheetNames。保持它們在1個函數中的目的是邏輯上的1個實體! –

+1

我看不到你的邏輯。你的一個功能不會做一件事,它會做幾件獨立的事情。通過將它保存在一個函數中,如果它們是單獨的,那麼更容易對代碼更改造成損害。 –

+1

如果類型是「prevMonth」,你會運行什麼代碼?我認爲你花時間建立你不使用的curr數組。我同意@Hand。您的代碼不清晰且效率低下。不要害怕單獨的功能,如果你的名字很好,它們確實有幫助。 – djna