このような場合の唯一の良い選択肢は、コードをリファクタリングすることです。ただし、既存のクラス インターフェイスを変更する必要はありません。適切に設計された複数の新しいクラスを作成し、元の不適切に設計されたクラスのロジックを置き換えることができます。次に、元のクラスをリファクタリングして、新しいクラスを内部で使用して機能を実行できます。これを一度に行う必要はありません。共有ライブラリで特定のロジックが必要であることがわかったら、そのロジックをリファクタリングし、残りはそのままにしておきます。時間が経つにつれて、この方法で全体をリファクタリングできます。もちろん、それがそれほど大きくないか、獣をリファクタリングする時間が世界中に常にある場合を除きます。ただし、通常はそうではありません。
たとえば、次のような非常に単純化されたクラスがあるとします。
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
明らかに、実世界の獣はそれほど単純ではなく、そのほんの一部をリファクタリングするために多くの作業が必要になる可能性がありますが、これで私が話していることのアイデアが得られることを願っています.