1

数週間前にこの質問をしたところ、適切な回答が得られました: ASP.NET クラス ライブラリのベスト プラクティス。今、別の質問があります。

私が抱えている問題は、ASP.NET アプリケーションを継承したことです。このアプリケーションには、理想的ではない密結合と低結合のクラスが多数含まれています。コードの一部を他のアプリと共有したい。ほとんどのコードは 1 つのクラスに存在しますが、クラスは他のクラスを参照し、それらのクラスは他のクラスを参照します。1 つのクラス (他のクラスを参照するクラス) でコードを共有する方法はありますか? これを行う唯一の方法は、Web サービスを使用することですが、機密情報があります。

4

1 に答える 1

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

明らかに、実世界の獣はそれほど単純ではなく、そのほんの一部をリファクタリングするために多くの作業が必要になる可能性がありますが、これで私が話していることのアイデアが得られることを願っています.

于 2012-07-18T14:05:23.823 に答える