范围,命名空间和文件架构

时间:2019-02-12 19:45:12

标签: vb.net

我正在开发一个Visual Studio项目,该应用程序可以细分为3个部分。 每个部分的行为均独立于其他部分。每个部分都将包含自己的.vb文件集,其中将包含模块(作为static类),类和变量,最好在该部分级别是“全局”。

组织.vb文件的最佳做法是什么?

从架构上来讲,主Module(文件='Main.vb')将通过调用部分Module(例如'SectionA中的SectionA)来按需调用3个部分之一。 vb')。然后,此SectionA Module将调用其他.vb文件中包含的其他模块或类,这些文件或类将存储在单独的文件夹中。

我们会有类似的东西

  1. Main.vb(包含Main Module
  2. SectionA.vb(包含SectionA Module
  3. SectionB.vb(包含SectionB Module
  4. SectionC.vb(包含SectionC Module
  5. SectionA / ClassA1.vb(包含ClassA1 Class
  6. SectionA / ModuleA2.vb(包含其他内容)
  7. SectionB / ClassB1.vb(包含内容)

如何确保文件夹“ SectionA”中包含的所有内容只能由SectionA Module访问?这等同于将'SectionA'文件夹的所有块封装在SectionA Module内并设置为Private。但是,我喜欢将源代码跨多个文件(每个文件或多或少一个类)的灵活性。

到目前为止,我正在使用Namespace进行组织,但这不能解决范围问题:'SectionA'文件夹中的任何Public Sub都可以从任何项目文件中访问。我还尝试在命名空间中将Module(模块,类)声明设置为Private,但看来这是禁止的

请参阅以下意图:

FILE Main.vb

Module MainModule
    Sub Main()
        Select Case UserChoice
            Case ChoseA1
                Call SectionA.DoThings()
            Case ChoseA2
                Call SectionA.DoOtherThings()
            Case ChoseB
                Call SectionB
            Case ChoseC
                Call SectionC
        End Select
    End Sub
End Module

FILE SectionA.vb

Namespace SectionA
    Module Main
        Private MySectionPrivateVariable
        Sub DoThings()
            Dim OneClass As New ClassA1
            Call DoMoreThings()
        End Sub
        Sub DoOtherThings()
            '...
        End Sub
    End Module
End Namespace

SectionA文件夹中的帮助文件

Namespace SectionA
    Module SectionA1
        Private MyModulePrivateVariable
        Sub DoMoreThings()
            '...
            'Problem: Cannot access SectionA.MySectionPrivateVariable
        End Sub
    End Module

    Public Class ClassA1
        '...
    End Class
End Namespace

FILE SectionB.vb

Namespace SectionB
    Module Main
        Private MySectionPrivateVariable
        Sub DoManyThings()
            '...
            'Problem: Can access SectionA.ClassA1
            'Problem: Can access SectionA.DoMoreThings()
        End Sub
    End Module
End Namespace

1 个答案:

答案 0 :(得分:1)

解决此问题的最简单方法是将应用程序拆分为多个项目(每个“部分”一个)。使他们每个人都有一个具有自己的名称空间的类库项目(我建议将项目命名为与名称空间相同的名称),然后让主项目通过项目引用(而不是DLL文件引用)来引用所有类库项目。 。一旦他们进入自己的项目,就可以通过将内容设置为Friend来控制可访问性。

或者,您可以将所有帮助程序类型嵌套在模块中,然后可以将可访问性设置为Private,但这可能会很快变得混乱:

Namespace SectionA
    Module Main
        Sub DoThings()
            Dim OneClass As New ClassA1
            ' ...
        End Sub

        Private Class ClassA1
            ' ...
        End Class
    End Module
End Namespace