几周前我问了这个问题,并收到了一些很好的答案:ASP.NET Class Library best practice。我现在有另一个问题。ASP.NET共享DLL
我遇到的问题是我已经继承了一个ASP.NET应用程序,它包含了很多紧耦合和低内聚的类,这并不理想。我想与其他应用程序分享一些代码。大多数代码存在于一个类中,但是该类引用了其他类,并且这些类引用了其他类等等。有没有什么方法可以在一个类中共享代码(引用其他类)?我能想到的唯一方法就是使用Web服务,但存在敏感信息。
几周前我问了这个问题,并收到了一些很好的答案:ASP.NET Class Library best practice。我现在有另一个问题。ASP.NET共享DLL
我遇到的问题是我已经继承了一个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
显然,现实世界的野兽从来都不是简单的,它可能会需要大量的工作,甚至重构的一小部分,但我希望,给你什么,我谈论的想法。
谢谢,如果你在一个类中设计了一个函数(设计不佳),并且你想在类库中分享它,那么你肯定会重构整个类。你是否吞噬第二个代码? – w0051977 2012-07-18 14:25:35
@ w0051977我更新了我的答案,举例说明了我正在谈论的内容。 – 2012-07-18 14:54:38
+1提供了一个完整的示例。 – w0051977 2012-07-18 17:19:58