几个星期前我问了这个问题并得到了一些好的答案:ASP.NET Class Library best practice。我现在有另一个问题。
我遇到的问题是我继承了一个ASP.NET应用程序,它包含许多具有紧耦合和低内聚的类,这并不理想。我想与其他应用分享一些代码。大多数代码存在于一个类中,但是类引用其他类,这些类引用其他类等。是否有任何方法可以在一个类中共享代码(引用其他类)?我能想到这样做的唯一方法是使用Web服务,但是有敏感的信息。
答案 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
显然现实世界的野兽从来就不那么简单,它可能需要大量的工作来重构甚至其中的一小部分,但希望能让你知道我在说什么。