4

依存性注入は、n層アーキテクチャに関連するため、関心の分離に違反しますか?

次のプロジェクトがあるとします。

MyApp.Data
MyApp.Business
MyApp.Web

DIを使用して、使用するデータコンテキストをビジネスレイヤーに指示する場合、これはSoCに違反しませんか?これは、UI(MyApp.Web)がデータアクセス層(MyApp.Data)の知識を持って、ビジネス層(MyApp.Business)にどのコンテキストを使用するかを指示する必要があることを意味します。

public class WebForm {
    public void Save(Object dto) {
        BusinessObject bo = new BusinessObject(Data.MyDataContext);
        bo.ValidateAndSave(dto);
    }
}

私は常に、n層アーキテクチャでは、各層が次の層(UIからビジネス、ビジネスからデータ)の知識のみを持つべきだと考えていました。これは本当に大したことではありませんか?

4

2 に答える 2

4

いいえ、それは SoC に違反していません。実際、それを助長しています。

問題は、あなたの例では、少なくとも UI で DI を使用していないことです。これらの依存関係を注入するのではなく、必要なオブジェクトを WebForm に明示的に構築させています。

主なアイデアは、ルート オブジェクトを作成するアプリに中央のブートストラッパーを配置することです。これにより、依存関係が取得され、他の依存関係から構築されます。手動で行うのは非常に面倒であるため、慣例または構成、またはその両方を使用して自動的にそれを行う DI コンテナーに依存します。

したがって、あなたの例では、DI コンテナーを使用して WebForm を構築し、依存関係を指定します。たとえば、DataContext に依存してそれらのエンティティを操作し、dto から作成する IBusinessObject への依存関係を指定します。次に、その Save メソッドで、手動またはコンテナーを介して外部から注入されたインスタンスを使用してそれを使用しますが、常にアプリのライフサイクルのルートポイントで使用します

于 2012-10-21T03:21:40.537 に答える