JeffreyPalermoによって記述されたOnionArchitectureを使用してASP.NETMVCアプリケーションを設計しています。
これはASP.NETMVC2.0プロジェクトであり、専用のビューモデルを使用してすべてのビューを厳密に入力する必要があります。ドメインモデルをビューに渡すことはありません。AutoMapperを使用して翻訳を行っています。AutoMapperはインフラストラクチャで分離されており、WebはAutoMapperが使用されていることを認識または認識していません。
現在、WebプロジェクトでIViewModelMappingインターフェイスを定義しています。これは、このサービスがコントローラーによって使用され、独自のビューモデルに直接アクセスできるためです。このようにして、インターフェイスはドメインモデル(コアの場合)とビューモデル(Webの場合)の両方にアクセスできます。
IViewModelMappingインターフェイスの実際の実装を提供するために、インフラストラクチャプロジェクトにObjectMapping名前空間を作成しました。これにより、実際のマッピング実装がタマネギの内部構造に分離されます。その際、インフラストラクチャはコアとWebの両方に依存する必要があります。
私の質問は、これらのプロジェクトは両方とも技術的にはタマネギの郊外(同じレイヤー内)にあるため、1つのプロジェクトがそのレイヤー内の別のプロジェクトに依存することを許可されていますか?このデザインの潜在的な落とし穴に気付いた人はいますか?
別の設計では、IViewMapperインターフェイスをCoreに移動しますが、CoreにはViewModelクラスへのアクセス権がないため、これは不可能です。ビューモデルをコアに移動することもできますが、UIレイヤーに固有であるため、コアには属さないように感じます。
提案されているアーキテクチャは次のとおりです。インフラストラクチャはコアとWebに依存していることに注意してください。Webは分離されたままであり、コアビジネスロジックにのみアクセスできます。