2

現在、Onion Architecture に基づくプロジェクトに取り組んでいます。上の画像はソリューションを示しています。

インフラストラクチャには、外部サービスがあります。ただし、WebAPI は Core にしかアクセスできません。

しかし、Web API プロジェクトでは、外部サービスによって公開されているいくつかのモデルにアクセスしたいですか? Web API で Infrastructure への参照を追加せずにこれを達成するにはどうすればよいでしょうか。

それとも、オニオン アーキテクチャを間違って実装したのでしょうか。

4

2 に答える 2

2

概念的には正しい軌道に乗っていますが、実装は難しいルールではありません。開始するには、最大で 5 つ以上のプロジェクトは必要ありません。3 つ (web ui css/js/views、ロジック/コントローラー、コード、およびテスト) が必要です。実際には、おそらく2つしか必要ありません(アプリケーション、テスト)

レイヤーのアイデアは概念的なものであり、物理的なものではありません。また、レイヤーを完全に分離しなければならないという厳格な規則はありません。むしろ、アプリケーションの中心的な焦点は、アプリケーションが何をするかです。それがどのように実装されているかの詳細に入ると、外側のレイヤーに移動します。

この場合、外部サービスから取得したデータにアクセスする必要があります。外部サービスの抽象化を作成しますIExternalServiceAdaptor。インターフェイスはドメイン層またはサーバー層に存在する場合がありますが、実装は、外部サービスの呼び出し方法の詳細が の実装内にカプセル化されているインフラストラクチャまたは外部層に存在する場合がありますIExternalServiceAdaptor

物理的な分離に固執する場合は、 にインターフェイスがCoreあり、 に実装がありInfrstructureます。

于 2012-11-30T01:53:52.393 に答える
0

しかし、Web API プロジェクトでは、外部サービスによって公開されているいくつかのモデルにアクセスしたいですか?

実際、WebApi プロジェクトは Core プロジェクトで定義されたオブジェクトのみを操作する必要があります。Jason が言ったように、外部サービスへの呼び出しは、Core に存在するインターフェイスの実装内にカプセル化する必要があります。これは、外部サービスによって公開されたモデルがコア モデルにマップされる場所です。

CodePlex の Matt Hidinger のソース コード ( http://onionarch.codeplex.com/ ) を見て、彼がこの種の問題をどのように扱っているかを確認してください。非常に簡単で理解しやすいものです。

于 2012-12-05T15:09:57.503 に答える