0

トピックをうまく検索できたかどうかはわかりませんが、質問に対する答えが見つからないようです。私の理解に基づくと、OnionArchitectureのUIとインフラストラクチャは同じレイヤーにあります。ASP.NET MVCプロジェクトにUIがあり、インフラストラクチャであるDALプロジェクトがあるとします。私のコードが以下のようなものであると仮定しましょう:

芯:

//IOrderSaverインターフェースもコアで定義されました

public class OrderService
{
    private IOrderSaver orderSaver;

    public OrderService(IOrderSaver orderSaver)
    {
        this.orderSaver = orderSaver;
    }

    public void AcceptOrder(Order order)
    {
        orderSaver.SaveOrder(order);
    }
}

インフラストラクチャ(DAL):

public class OrderSaverDAL : IOrderSaver
{
    //implementation goes here
}

ここで、UI(ASP.NET MVC)で、OrderServiceクラスをインスタンス化して、注文を受け入れることができるようにします。UIがそれを行うには、IOrderSaverをコンストラクターに渡す必要があります。OrderSaverDALを渡す必要があります。

質問

  1. UI(ASP.NET MVC)はOrderSaverDALを参照する必要がありますか?オニオンアーキテクチャの私の理解から(私がそれを正しく理解している場合)、UIはDALへの参照を持っていないはずです。誰か説明してもらえますか?

  2. ASP.NET MVCプロジェクトからOrderSaverDALを参照する必要がない場合、ASP.NET MVC内でOrderServiceを構築するにはどうすればよいですか?これを実現する方法のサンプルコードを提供して、私を導いていただけますか?

助けてくれてありがとう!

4

2 に答える 2

2

ui と dal を接続する追加の構成モジュール/レイヤーが必要です。リフレクションなしでこれを自分で実装する場合、この構成モジュールにはすべての参照が必要です。

通常、オニオン アーキテクチャは、構成ファイルまたはローカル アセンブリの検査を通じて実行時に参照を解決できる依存性注入コンテナーと連携します。

于 2013-01-29T10:23:36.577 に答える
0
  1. UI (ASP.NET MVC) は OrderSaverDAL を参照する必要がありますか? オニオン アーキテクチャに関する私の理解から (私が正しく理解していれば)、UI には DAL への参照がないはずです。誰か説明してくれませんか?

UI が論理的に DAL に依存するべきではないと言うのは正しいことです。

ただし、k3b が指摘しているように、依存関係の逆転 (Onion Architecture が大きく依存している) を行う一般的な方法は、DI コンテナーを使用することです。次に、コンテナを使用してアプリケーションのオブジェクト グラフを構成する場所である、ある種のComposition Rootが必要になります。コンポジション ルートは「全知」である必要があり、接続するためにすべてのプロジェクトへの参照が必要です。

多くの場合、UI はコンポジション ルートがホストされる場所であることがわかります。UI はアプリケーションの自然な開始点であり、適切なタイミングでコンポジションを行うのに最適だからです。コンポジション ルート用に別のプロジェクトを作成することもできますが、これはあまり便利ではありません。

于 2013-01-29T14:14:48.530 に答える