抽象化

抽象級別有助於確定何時拆分

通過使用越來越詳細的程式碼實現功能來實現抽象。巨集的入口點應該是一個具有高抽象級別的小程式,這使得一目瞭然的內容很容易掌握:

Public Sub DoSomething()
    With New SomeForm
        Set .Model = CreateViewModel
        .Show vbModal            
        If .IsCancelled Then Exit Sub
        ProcessUserData .Model
    End With
End Sub

DoSomething 過程具有很高的抽象級別 :我們可以告訴它正在顯示一個表單並建立一些模型,並將該物件傳遞給知道如何處理它的某個 ProcessUserData 過程 - 如何建立模型是另一個過程的工作:

Private Function CreateViewModel() As ISomeModel
    Dim result As ISomeModel
    Set result = SomeModel.Create(Now, Environ$("UserName"))
    result.AvailableItems = GetAvailableItems
    Set CreateViewModel = result
End Function

CreateViewModel 函式僅負責建立一些 ISomeModel 例項。部分責任是獲取一系列可用專案 - 如何獲取這些專案是在 GetAvailableItems 程式背後抽象的實現細節:

Private Function GetAvailableItems() As Variant
    GetAvailableItems = DataSheet.Names("AvailableItems").RefersToRange
End Function

這裡的過程是從 DataSheet 工作表上的命名範圍讀取可用值。它也可以從資料庫中讀取它們,或者值可以是硬編碼的:它是一個實現細節,對於任何較高的抽象級別都不是一個問題。