玉ねぎarchicecture依存関係を一層:インフラおよびウェブ通信
-
22-09-2019 - |
質問
私設計ASP.NET MVCを使ってアプリケーションを オニオン建築 で記述されるジェフリー-パレルモ.
このASP.NET MVC2.0プロジェクトでは、私はすべて眺めると強く型付けされた専用のビューモデルにしていくためには、さまざまな通ドメインモデルをちます。しAutoMapperの翻訳--AutoMapperが分離されたインフラを、Webを知らないまたは保護するAutoMapperを使っています。
現在、私を定義するIViewModelMappingインターフェースのウェブプロジェクト--で本サービスを使用するコントローラで直接アクセスはそのコミュニケーションモデルです。そうすることによって、インターフェースでアクセスの両方のドメインモデル(コア)とのモデル(Web).
を提供するために、実際のIViewModelMappingタで作成した、ObjectMapping名前空間のインフラプロジェクトは、分離、実際のマッピングの実施にIntrastructureのタマネギが入っています。そのことが必要であるインフラの依存関係の両方の中核といます。
私の質問はらこれらのプロジェクトは、技術的には郊外のオニオンと同一の層)がプロジェクトが利用可能で依存のプロジェクトにレイヤ?は誰にも予告潜在的な落とし穴とのことですか?
代替デザインが可動するのIViewMapperスコアがることは不可能なコアなアクセスのViewModelます。私も以下のソフトウェアのモデルコアも気になるようにも属していないが、彼特有のUI。
の提案アーキテクチャは--知のインフラ整備の依存関係の中核といます。ウェブはらのみアクセスできるのは、コアビジネスロジック
解決
あなたはUI(ウェブ)に依存するインフラストラクチャを必要としないことが正しいですが、私は時々そのルールを破っています。
私は)メソッドマップ(とIMapperを作成し、IViewModelMappingの代わりに思うだろう。次に、インターフェイスは、ビューモデルマッピング、または多分ちょうど通常マッピングとしなければならないかもしれない実装を持つことができます。いずれにしても、それは意味的モデルのいずれかのタイプにバインドされていないので、そのインターフェイスは、コアにすることができます。
グレートグラフィック。私はあなたの質問の肉に答え願っています。オニオンアーキテクチャの全体的な哲学は、アプリケーションの途中(コア)であなたのビジネスロジックとモデルを維持し、遠く外側に可能な限りあなたの依存関係をプッシュすることです。
他のヒント
して移動 オブジェクトマッピング 入 ウェブ 層します。
あなたのWeb / UI層は、インフラストラクチャ層に依存することができます。しかし、それはインフラストラクチャ層上のWebの依存関係を持っている良いデザインではありません。オニオンアーキテクチャは、はるか外側に可能な限りあなたの依存関係をプッシュすると言います。
あなたは、UIに「\ビルダー」フォルダを作成することができます。その内の1つのインタフェースファイルを追加し、例。.. IBuilderまたはIMapperとその中のConvertToViewModelまたはCreateMappingのようなメソッドを宣言します。何でもあなたが好きます。
*ビルダー ** IBuilder.csはこちらの方法を-declare。 ** Builder.cs - - 、ここで方法を実装ビューモデルの間のマッピングを定義し、それはドメインモデル(コア層から参照)に対応し、ここで適切なビューモデルを戻します。