3

私のテスト プロジェクトでは、WCF サービスを作成して実行しました。次に、MVC 4 プロジェクトを作成しました。1 つのソリューションの下でレイヤーに分割されます。

  • モデル層。
  • UI/View/Controller レイヤー
  • リポジトリ層。

簡単なテストを行うには: UI レイヤーで、WCF サービスへの Web 参照を追加しました。コントローラーでは、ビューにドロップダウンを設定するために "使用" して WCF サービスに接続しました。

しかし、私は依存性注入で分離を推進しています。

リポジトリ レイヤーでは、populate ドロップダウンを使用してインターフェイスを作成し、それを挿入しました。問題ない。

私がコンセプトに苦労しているのは:

  1. UI レイヤーで WCF サービスを使用し、リポジトリ レイヤーで参照する必要がありますか? (正しくないようです)
  2. 別のプロジェクト (データ レイヤー) を作成し、Web 参照を WCF サービスに追加してから、リポジトリからデータ レイヤーへの参照を作成しますか?

これにより、別の質問が発生します。別のプロジェクト (レイヤー) で WCF サービスへの Web 参照を作成すると、WCF サービスに関する情報がメインの config.sys ファイルに存在しません...

だから私はこの部分を把握するのに苦労しています...もっと読むべきものはありますか?

4

2 に答える 2

1

ケーキはさまざまな方法でカットできることに気づいたので、ここで私の切り方を紹介します。

質問 #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 つ以上の層。

于 2013-01-09T09:45:19.097 に答える
-1

WCF 呼び出しをデータ ソースとして扱っているように思えます。これにより、リポジトリ レイヤーに自然に適合します。リポジトリの仕事は、データ ソースの実装に関する知識を他の層から抽象化することです。

.NET プロジェクトを使用して層の境界を強制するのではなく、同じプロジェクト内のフォルダーを使用して、物理的な分離ではなく論理的な分離を強制することをお勧めします。ほとんどのユースケースでは、物理的な分離は必要なく、指摘したより難しい構成など、複雑さが増します。

于 2013-01-08T17:36:07.663 に答える