1

几周前我问了这个问题并得到了一些很好的答案:ASP.NET 类库最佳实践。我现在有另一个问题。

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

4

1 回答 1

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

显然,现实世界中的野兽从来没有那么简单,甚至可能需要大量工作来重构其中的一小部分,但希望这能让您了解我在说什么。

于 2012-07-18T14:05:23.823 回答