在 Vb.Net 中定义部分模块的最佳替代方法

Best alternative approach to define a Partial Module in Vb.Net

场景


假设你,程序员,正在开发一个带有模块文件的 API 让我们说 BitmapExtensions.vb 它充满了扩展方法,每个扩展方法有例如 20 个重载,这导致源代码增加了数英里的代码行,

然后,为了在我们的编程环境中提高效率,请确保您希望将每个方法分离到不同的文件中(一种具有相同模块名称的部分模块,就像我们对部分 类 所做的那样),但是,无法定义部分模块,并且 Class 不支持 Vb.Net、

中的扩展方法

这完全破坏了用户体验和程序员的工作效率,因为所有这些都是缺点,在搜索特定重载或添加更多内容时,总是需要使用 Visual Studio 代码编辑器上的垂直滚动条来滚动数千和数千行,或者多次使用搜索框查找方法名称,因为所有方法及其所有重载都在同一个文件中混乱......而且,它非常丑陋。

问题


只是...如果可能的话,程序员在这些情况下到底能做些什么来组织源代码架构?。

我真的不想保留一个包含 3.000 行代码的模块文件,我希望 1 个文件中有 500 行代码(这意味着 1 个方法及其所有重载)保留相同的名称(space), 以此类推,将其他成员放入单独的文件中。

这可能是某种方式吗?

PS:当然,将扩展方法转换为通用方法以获得定义部分 类 的好处并不是一种选择。

2016 年 8 月 3 日编辑

自 VB .Net 14.0.

以来,部分模块和接口可用

原答案

嗯,知道了使用模块进行类型提升的事实 (https://msdn.microsoft.com/en-us/library/xz7s1h1x.aspx),您创建一个命名空间,然后将其拆分为模块文件。如果所有方法在命名空间中都是唯一的,您只需导入命名空间,无需命名模块即可访问它们...

我想这就是为什么模块不能是部分的,因为如果方法是唯一的,模块名称可以省略。

文件test1.vb

Namespace Test
   Module Test1
     Function Hello() as String
       ...
     End Function
   End Module
End Namespace

文件test2.vb

Namespace Test
   Module Test2
     Function Hi() as String
       ...
     End Function
   End Module
End Namespace

其他文件

Imports Test
Public Function MyFunc() as String
  Return Test.Hi()
End Function

据我了解,VB.Net VS 2015 支持部分模块 - MSDN link。不确定这是否适合您。

也就是说,我还有另一个场景可以说明部分模块 useful/necessary。考虑使用代码生成来创建由单个大型模块组成的文件的情况。该模块包含 Public 和私有方法。开发人员可以 want/need 创建使用私有方法的新方法(在生成的代码之外)。如果生成的文件由部分模块组成,开发人员可以简单地创建另一个源文件并添加到该部分模块。

当部分模块不是一个选项(即 VS2015 之前)时,我会对这个问题的解决方案感兴趣。谢谢