几周前我问了这个问题并得到了一些很好的答案:ASP.NET 类库最佳实践。我现在有另一个问题。
我的问题是我继承了一个 ASP.NET 应用程序,其中包含许多紧密耦合和低内聚的类,这并不理想。我想与其他应用程序共享一些代码。大多数代码存在于一个类中,但是该类引用其他类,而这些类引用其他类等。有没有办法在一个类中共享代码(引用其他类)?我能想到的唯一方法是使用 Web 服务,但存在敏感信息。
几周前我问了这个问题并得到了一些很好的答案:ASP.NET 类库最佳实践。我现在有另一个问题。
我的问题是我继承了一个 ASP.NET 应用程序,其中包含许多紧密耦合和低内聚的类,这并不理想。我想与其他应用程序共享一些代码。大多数代码存在于一个类中,但是该类引用其他类,而这些类引用其他类等。有没有办法在一个类中共享代码(引用其他类)?我能想到的唯一方法是使用 Web 服务,但存在敏感信息。
在这种情况下,唯一好的选择是重构代码。但是,您不必更改现有的类接口。您可以创建多个设计正确的新类,并替换原始设计不佳的类中的逻辑。然后,您可以重构原始类以在内部使用新类来执行功能。您不必一次全部完成。当您发现您需要共享库中的特定逻辑位时,只需重构该逻辑并保持其余部分不变。随着时间的推移,您可以通过这种方式重构整个事物。当然,除非它不是那么大,或者你有足够的时间来重构这头野兽。但是,通常情况并非如此。
例如,假设您有以下过度简化的类:
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
显然,现实世界中的野兽从来没有那么简单,甚至可能需要大量工作来重构其中的一小部分,但希望这能让您了解我在说什么。