ASP.NET共享DLL

时间:2012-07-18 13:57:15

标签: asp.net vb.net

几个星期前我问了这个问题并得到了一些好的答案:ASP.NET Class Library best practice。我现在有另一个问题。

我遇到的问题是我继承了一个ASP.NET应用程序,它包含许多具有紧耦合和低内聚的类,这并不理想。我想与其他应用分享一些代码。大多数代码存在于一个类中,但是类引用其他类,这些类引用其他类等。是否有任何方法可以在一个类中共享代码(引用其他类)?我能想到这样做的唯一方法是使用Web服务,但是有敏感的信息。

1 个答案:

答案 0 :(得分:2)

在这种情况下,唯一的好选择是重构代码。但是,您不必更改现有的类接口。您可以创建多个正确设计的新类,并替换原始设计不佳的类中的逻辑。然后,您可以重构原始类以在内部使用新类来执行该功能。您不必一次完成所有操作。当您发现在共享库中需要特定的逻辑时,只需重构该逻辑并保持其余部分不受影响。随着时间的推移,你可以通过这种方式重构整个事物。当然,除非它不是那么大,否则你在世界上一直都在重构这头野兽。但是,通常情况并非如此。

例如,假设您有以下过度简化的类:

Public Class OriginalBeast
    Private _dependency As New Dependency()

    Public Function Method1() As Integer
        Return _dependency.Calculate(2)
    End Sub

    Public Function Method2() As Integer
        Return _dependency.Calculate(2)
    End Sub

    ' ...

    Public Function Method1027() As Integer
        Return _dependency.Calculate(1027)
    End Sub
End Class

Public Class Dependency
    Public Function Calculate(value As Integer) As Integer
        Return value * 2
    End Function
End Class

并且您希望在类库中共享OriginalBeast.Method2中的逻辑,您需要将Dependency类移动到类库(并且可能还需要部分重构它)。然后你需要创建一个只包含原始野兽所需方法的新类:

Public Interface INice
    Function Method2() As Integer
End Interface

Public Class Nice
    Implements INice

    Public Sub New(dependency As IDependency)
        _dependency = dependency
    End Sub

    Private _dependency As IDependency

    Public Function Method2() As Integer Implements INice.Method2
        Return _dependency.Calculate(2)
    End Function
End Class

Public Interface IDependency
    Function Calculate(value As Integer) As Integer
End Interface

Public Class Dependency
    Implements IDependency

    Public Function Calculate(value As Integer) As Integer Implements IDependency.Calculate
        Return value * 2
    End Function
End Class

然后,您需要重构原始野兽以使用类库而不是逻辑本身:

Public Class OriginalBeast
    Public Sub New()
        _dependency = New Dependency()
        _nice = New Nice(_dependency)
    End Sub

    Private _dependency As IDependency
    Private _nice As INice

    Public Function Method1() As Integer
        Return _dependency.Calculate(2)
    End Sub

    Public Function Method2() As Integer
        Return _nice.Method2()
    End Sub

    ' ...

    Public Function Method1027() As Integer
        Return _dependency.Calculate(1027)
    End Sub
End Class

显然现实世界的野兽从来就不那么简单,它可能需要大量的工作来重构甚至其中的一小部分,但希望能让你知道我在说什么。