抽象化

抽象级别有助于确定何时拆分

通过使用越来越详细的代码实现功能来实现抽象。宏的入口点应该是一个具有高抽象级别的小程序,这使得一目了然的内容很容易掌握:

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 工作表上的命名范围读取可用值。它也可以从数据库中读取它们,或者值可以是硬编码的:它是一个实现细节,对于任何较高的抽象级别都不是一个问题。