在VB.NET中使用模块被认为是不好的做法吗?

Rha*_*ody 4 .net vb.net module

在设计新应用程序的过程中,我想知道使用具有属性的模块是否被认为是一种不好的做法.

一些示例代码:

Module modSettings

   public property Setting1 as string

   public property DatabaseObject as IDatabaseObject

End Module
Run Code Online (Sandbox Code Playgroud)

上面的代码只是一个强调我的问题的例子.过去,这种结构在VB6中使用了很多.在过去,我在.NET项目中也使用它.

但是现在有了依赖注入,可测试性和关注点分离等流行语,上面的结构闻起来很糟糕.我无法真实地描述为什么,但它只是感觉不对.我必须承认我对上面的关键词不是很熟悉.

所以我想知道上面的代码是不是一个坏的做法.如果是这样,你会用什么Module

Mat*_*att 9

Centro是正确的,Module(或具有共享成员的NotInheritable类)最接近于C#静态类.从技术上讲,它没有任何问题,因为它只是VB创建这种类的方法之一.例如,你不能Public Shared Class Settings在VB中说,因为你不能把Shared关键字放在一个类上.

如果特定情况需要一个模块,我自己就不会称之为不好的做法,但是否则模块(或其他静态类等价物)可能不是您想要的松散耦合,可测试代码的设计选择.此外,虽然具有共享成员的NotInheritable类比描述模块更具描述性,但至少有一种情况必须使用模块.

你什么时候需要在VB.Net中使用模块?如果你想利用扩展方法,那么它是你唯一的选择,因为如上所述,你不能在VB.Net中创建共享(静态)类,也不能在NotInheritable Classes上使用扩展.您必须使用以下模块:

Imports System.Runtime.CompilerServices

Public Module StringExtensions
    <Extension()> _
    Public Function Remove( _
                        ByVal input As String, _
                        ByVal subStrings As String()) As String
        Return String.Join("", input.Split(subStrings, StringSplitOptions.None)).Trim()
    End Function
End Module
Run Code Online (Sandbox Code Playgroud)

在C#中,您不能使用模块,必须使用如下的静态类:

public static class StringExtensions
{
    public string Remove(this string input, string[] subStrings)
    {
        return string.Join("", input.Split(subStrings, StringSplitOptions.None)).Trim();
    }
}   
Run Code Online (Sandbox Code Playgroud)