首页 > 解决方案 > 我是否应该始终完全限定 VBA 中的方法和类

问题描述

我的问题是:我是否应该始终完全限定 VBA 中的方法和类?


Lapis.CollectionExt.Sort这是一个单元测试,它在使用方法后检查给定集合的排序位置。

完全限定的方法和对象

Private Sub SortTest()

    On Error GoTo ErrHandler
    Const MethodName = "SortTest"

    ' Act
    Dim Actual As VBA.Collection
    Set Actual = Lapis.CollectionExt.Sort(Lapis.CollectionExt.Make(3, 2, 1), New Lapis.LongComparer)

    ' Assert
    Dim Expected As VBA.Collection: Set Expected = Lapis.CollectionExt.Make(1, 2, 3)
    Lapis.ExUnit.AreEqualSets Expected, Actual, New Lapis.LongEqualityComparer, GetSig(MethodName)

    Exit Sub
ErrHandler:
    Lapis.ExUnit.TestFailRunTime GetSig(MethodName)

End Sub

最低限度限定的方法和对象

Private Sub SortTest()

    On Error GoTo ErrHandler
    Const MethodName = "SortTest"

    ' Act
    Dim Actual As Collection
    Set Actual = CollectionExt.Sort(CollectionExt.Make(3, 2, 1), New LongComparer)

    ' Assert
    Dim Expected As Collection: Set Expected = CollectionExt.Make(1, 2, 3)
    ExUnit.AreEqualSets Expected, Actual, New LongEqualityComparer, GetSig(MethodName)

    Exit Sub
ErrHandler:
    ExUnit.TestFailRunTime GetSig(MethodName)

End Sub

我觉得总是完全限定的名称会增加代码库中的“代码噪音”,从而使代码更难理解。

标签: vba

解决方案


你根本不需要用你自己的代码来做这件事。

描述性地命名您的类/方法,以免它们发生冲突。避免通用名称。

所以,你的 CollectionExt 我会倾向于命名 LapisCollection。它仅多出 2 个字符,无需资格即可为您提供课程的完整来源。唯一一次你必须获得资格的情况是,如果其他人编写了一个名为“Lapis”的模块/插件并使用相同的约定,并且它与你的代码一起包含......那么你会得到各种各样的头痛无论如何,就像模块名称冲突!


推荐阅读