美好的一天編碼 Godz,
我正在嘗試清理一些代碼,并想知道如何降低我創建的方法的 Cylcomatic 復雜性。在匯入 CSV 檔案期間使用此方法。CSV 檔案中的一個欄位是許可證型別,它是一個字串(即“BFI 監督貸款人 - 網站 #2 許可證”)我正在將其轉換為一個整數(1、2、3 或 4),該整數將被保存到資料庫以根據許可證型別參考行業型別。
下面是我的方法。非常感謝有關樹蔭樹 VB.NET 編碼器的一些提示...
Private Function CheckIndustryType(LicName)
Dim VAR_IndType As Integer
Select Case Text_LicName
Case "BFI Level I Check Cashing - Branch License"
VAR_IndType = 3
Case "BFI Level II Check Cashing - Branch Certificate"
VAR_IndType = 3
Case "BFI Supervised Lender - Branch License"
VAR_IndType = 1
Case "BFI Deferred Presentment - Branch License"
VAR_IndType = 3
Case "BFI Supervised Lender - Website #1 License"
VAR_IndType = 1
Case "BFI Supervised Lender - Website #2 License"
VAR_IndType = 1
Case "BFI Supervised Lender - Website #3 License"
VAR_IndType = 1
Case "BFI Supervised Lender - Website #4 License"
VAR_IndType = 1
Case "BFI Supervised Lender - Website #5 License"
VAR_IndType = 1
Case "BFI Supervised Lender - Website #6 License"
VAR_IndType = 1
Case "BFI Level II Check Cashing - Company License"
VAR_IndType = 3
Case "BFI Level I Check Cashing - Company License"
VAR_IndType = 3
Case "fI Branch Mortgage Lender/Servicer"
VAR_IndType = 2
Case "BFI Branch Mortgage Lender/Servicer - Other Trade Name #1"
VAR_IndType = 2
Case "BFI Branch Mortgage Lender/Servicer - Other Trade Name #2"
VAR_IndType = 2
Case "BFI Branch Mortgage Lender/Servicer - Other Trade Name #3"
VAR_IndType = 2
Case "BFI Branch Mortgage Lender/Servicer - Other Trade Name #4"
VAR_IndType = 2
Case "BFI Branch Mortgage Lender/Servicer - Other Trade Name #5"
VAR_IndType = 2
Case "BFI Branch Mortgage Lender/Servicer - Other Trade Name #6"
VAR_IndType = 2
Case "BFI Mortgage Lender / Servicer License"
VAR_IndType = 2
Case "BFI Mortgage Lender/Servicer License - Other Trade Name #1"
VAR_IndType = 2
Case "BFI Mortgage Lender/Servicer License - Other Trade Name #2"
VAR_IndType = 2
Case "BFI Mortgage Lender/Servicer License - Other Trade Name #3"
VAR_IndType = 2
Case "BFI Mortgage Lender/Servicer License - Other Trade Name #4"
VAR_IndType = 2
Case "BFI Mortgage Lender/Servicer License - Other Trade Name #5"
VAR_IndType = 2
Case "BFI Mortgage Lender/Servicer License - Other Trade Name #6"
VAR_IndType = 2
Case Else
VAR_IndType = 4
End Select
Return VAR_IndType
End Function
uj5u.com熱心網友回復:
在這種情況下,我會使用字典。它將獨立路徑的數量減少到 2,第二個是必要的,因為您當然使用默認值。
Module Module1
Dim industryTypeMap As New Dictionary(Of String, Int32) From {{"BFI Level I Check Cashing - Branch License", 3},
{"BFI Level II Check Cashing - Branch Certificate", 3},
{"BFI Supervised Lender - Branch License", 1}}
Sub Main()
Console.WriteLine(CheckIndustryType("BFI Supervised Lender - Branch License"))
Console.WriteLine(CheckIndustryType("BFI Level II Check Cashing - Branch Certificate"))
Console.WriteLine(CheckIndustryType("Other"))
End Sub
Private Function CheckIndustryType(LicName As String)
Dim industryInt As Int32
If industryTypeMap.TryGetValue(LicName, industryInt) Then
Return industryInt
Else
Return 4
End If
End Function
End Module
這輸出:
1
3
4
您可以在函式中定義字典以將所有代碼維護在一起,但如果您重復呼叫該函式,這顯然會運行得更慢。
uj5u.com熱心網友回復:
我通過縮短案件的數量StartsWith和Contains使用Select Case True。
Private Function CheckIndustryType(LicName As String) As Integer
Dim VAR_IndType As Integer
Select Case True
Case LicName.Contains("Check Cashing")
VAR_IndType = 3
Case LicName.StartsWith("BFI Supervised Lender")
VAR_IndType = 1
Case LicName.StartsWith("BFI Deferred Presentment")
VAR_IndType = 3
Case LicName.StartsWith("fI")
VAR_IndType = 2
Case LicName.StartsWith("BFI Branch Mortgage Lender")
VAR_IndType = 2
Case Else
VAR_IndType = 4
End Select
Return VAR_IndType
End Function
uj5u.com熱心網友回復:
一長串長字串是有風險的,因為任何更改都很可能導致輸入錯誤,然后字串不匹配。我可能會做一個Enum:
Enum LicenseType
BFILevelICheckCashingBranchLicense
BFILevelIICheckCashingBranchCertificate
BFISupervisedLenderBranchLicense
...
End Enum
然后針對該值進行測驗。為了降低復雜性,我會創建一個屬性,如:
Class VarIndTypeAttribute
Inherits System.Attribute
Public VarIndType As Integer
Sub New(varIndType As Integer
Me.VarIndType = varIndType
End Sub
End Class
然后列舉變為:
Enum
<VarIndType(3)>
BFILevelICheckCashingBranchLicense
<VarIndType(3)>
BFILevelIICheckCashingBranchCertificate
<VarIndType(1)>
BFISupervisedLenderBranchLicense
...
End Enum
然后你做一個像
<Extension>
Function ToVarIndType(enumValue As [Enum]) As Integer
Dim att = enumValue.GetAttributeOfType(Of VarIndTypeAttribute)()
Return If(att IsNot Nothing, att.VarIndType, 0)
End Function
進而
Dim valueEnum As LicenseType = ...
Dim VarIndType = valueEnum.ToVarIndType
并且您根本不需要查找功能!
您可能也想VarIndType成為 an Enum,因此在整個應用程式中不會有像 0 和 3 這樣的魔法值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/369700.html
上一篇:總結一個SELECT查詢
