ケーキはさまざまな方法でカットできることに気づいたので、ここで私の切り方を紹介します。
質問 #1: 「UI レイヤーで WCF サービスを使用し、リポジトリ レイヤーで参照しますか?」まず、Steven がコメントで指摘しているように、3 番目のサーバー層を挿入する場合は、深く検討する必要があります。UI レイヤーは、「IIS でホストされるレイヤー」に名前を変更できます。そうすることで、MVC プレゼンテーション レイヤーとサービスのホスト レイヤーの両方のホスト レイヤーになります。ただし、これは、サービスがこのレイヤーに実装されていることを意味するのではなく、ここでホストされていることを意味するだけです (web.config でのみインターフェイスと実装名前空間を参照することの問題)。
質問 #2: 「別のプロジェクト (データ レイヤー) を作成し、WCF サービスへの Web 参照を追加してから、リポジトリからデータ レイヤーへの参照を作成しますか?」私がこれを読んだとき、あなたは一度に複数の質問をしています: はい、リポジトリをカプセル化するために別のレイヤーを作成する必要があります。いいえ、このレイヤーに wcf に関連するものを含めないでください。サーバー層が wcf サービスへのクライアント アクセスを必要とする場合、これを論理層に分離し、ビジネス ロジック層のフォルダーとして配置するか、別の物理的な「データ アダプター層」として配置する必要があります。リポジトリ層では決してありません。概念的に wcf データ アダプター レイヤーがリポジトリ レイヤーと同じレベルであることは事実ですが、データベース アクセスとサービス アクセスを同じ論理レイヤーまたは物理レイヤーに混在させないでください。
質問としてしか答えられない 3 番目の質問: アーキテクチャで WCF を実現する目的は何ですか? 別のサービス層を注入したいですか、それともレイヤー分離と層分離を混同していますか?
層の分離は実行時にインプロセスで結合できますが、層の分離はある種のネットワーク上のリモーティング (wcf など) を介してのみ実行時に結合できます。
Steven がコメントで指摘しているように、アーキテクチャで wcf を使用する必要性を実際に文書化していません。
論理レイヤーと層の観点からアーキテクチャを見てみましょう (ケーキをカットします)。
Client-Access-Layer (#1、ブラウザのコンテキストで実行)
Web-Host-Layer (#2、外側のサーバー層を表す) には、すべての MVC コードが含まれています。おそらく、Model は独自の物理層に存在します。
Service-Layer (レイヤーを層にさらに抽象化する必要がないため、アーキテクチャにはまだ存在しません)
ビジネス層 (#2、プレゼンテーション層とデータベース層、およびデータ アクセス層の間にあるビジネス ロジックを表す)
リポジトリ層 (#2、データベース アクセス ロジックとマッピングをカプセル化)
サービス アクセス層 (#2、外部のサービスへのアクセスをカプセル化、BL 層または別の物理層のフォルダーとして実装可能)
データベース層 (#3、SQL サーバー)
IIS をホストとして使用し、C# を実装言語として使用して、WCF で DI を実装する方法を尋ねています。
または。
n 層の .net アプリケーションを構築するための一般的なガイダンスを求めていますか。
このような例がたくさんあるので、最初は簡単です。
2 つ目は、答えが常に「場合による」であるため、よりトリッキーです。それは、あなたのニーズ、専門知識のレベル、プロジェクトの予定期間などによって異なります。
これが少し役立つことを願っています。
必要に応じて、動作 wcf unity の実装を送信できます。
コンセプト:
論理層 - 責任を分離するために使用されるアーキテクチャの概念。レイヤーには下向きの結合があり、上向きの結合はありません。
物理層 - 論理的な分離を強制するために使用される実装構造。.net アセンブリは、物理層の実装として使用できます。
層 - 他の層をホストしていないマシン上に存在できる 1 つ以上の層。