2012-07-18 96 views
1

几周前我问了这个问题,并收到了一些很好的答案:ASP.NET Class Library best practice。我现在有另一个问题。ASP.NET共享DLL

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

回答

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 

显然,现实世界的野兽从来都不是简单的,它可能会需要大量的工作,甚至重构的一小部分,但我希望,给你什么,我谈论的想法。

+0

谢谢,如果你在一个类中设计了一个函数(设计不佳),并且你想在类库中分享它,那么你肯定会重构整个类。你是否吞噬第二个代码? – w0051977 2012-07-18 14:25:35

+0

@ w0051977我更新了我的答案,举例说明了我正在谈论的内容。 – 2012-07-18 14:54:38

+0

+1提供了一个完整的示例。 – w0051977 2012-07-18 17:19:58