3

デスクトップブラウザから閲覧できるウェブサイトを開発する必要があります。また、同じ Web サイト用の Android アプリケーションを開発する必要があります。C#、Microsoft SQL Server と Windows Communication Foundation、Linq To Entity with Repository Framework を使用した ASP.NET MVC の使用を考えています。

WCF は、リポジトリ フレームワークを使用して Linq to Entity を使用してデータベースにアクセスし、JSON を返します。

質問 1 Android アプリケーションは WCF サービスを呼び出します。私たちは正しいと考えていますか?

質問 2 ASP.NET MVC Web サイトは WCF サービスを呼び出します。ASP.NET MVC アプリケーションで WCF サービスを呼び出す方が良いですか、それとも ASP.NET アプリケーションが途中で WCF を使用せずにデータベースと直接通信する方が良いですか?

私の考えは、Android アプリケーションにのみ WCF を使用し、途中で WCF を使用せずにリポジトリ パターンを使用してエンティティ フレームワークへの linq を使用して、ASP.NET MVC をデータベースと直接対話させることです。これは良いアプローチでしょうか?

質問 3 ASP.NET MVC Web サイトが WCF サービスを呼び出す場合、どこに DI を実装する必要がありますか。リポジトリ フレームワークと WCF サービスの間である必要があり、DI は ASP.NET MVC と WCF の間では何の関係もないと思います。右?

これは簡単な質問かもしれませんが、同じ種類の要件がある場合、他の人がどのようにしているのか知りたいです。ウェブサイトや Android アプリケーションのように。私はDIとその使い方に慣れていません。私はDIについて読んでいますが、よくわかりません。だから私はDIがどこに存在するのか知りたかったのですか?

4

1 に答える 1

6
  1. Android アプリはデータベースを直接呼び出すことができないため、間にサービスが必要です。これは WCF である場合もあれば、ASP.NET Web API である別の一般的なオプションである場合もあります。
  2. MVC アプリが WCF サービスを介してデータベースと間接的に通信できるようにしないでください。これが本当に必要な場合 (たとえば、セキュリティや組織の問題のため) を除きます。WCF との通信には多くのオーバーヘッドがあり、必ずしもそうとは思えません。
  3. MVC アプリが WCF サービスを呼び出せるようにする場合、MVC と WCF アプリケーションの両方が独自のComposition Rootを取得します。これは、それぞれに独自の DI 構成と、依存関係を注入する独自の方法があることを意味します。彼らは多くを共有するかもしれませんが、そうである必要はありません。

私の答えが邪魔だと思ったかもしれません。おそらく、データベースと通信する WCF サービスだけではなく、データベースと通信する WCF サービスと MVC アプリの両方を使用することによる開発オーバーヘッドが気になるでしょう。

ただし、そうである必要はありません。実際、これは当てはまらないはずです。あなたがそれをしているとき、あなたは間違ったことをしています。WCF サービス自体は、ビジネス レイヤー上の非常に薄いレイヤーに過ぎないはずです。MVC アプリが使用するのと同じビジネス レイヤー。実際、正しい抽象化を適用すると、MVC アプリをデータベースの使用から WCF サービスの使用に数分で切り替えることができます。

これは、ビジネス オペレーションを一般的な抽象化の背後に配置し、メッセージ ベースのアーキテクチャを使用することで実現できます。その場合、WCF サービス (ま​​たは Web API) は、これらのメッセージを単純に除外して、ビジネス層に転送できます。これを正しく行えば、WCF サービスまたは Web API サービスをメンテナンス フリーになるように記述できることがわかります。つまり、システムが大きくなっても変更する必要はありません。新しい業務がシステムに追加されたとき。

次の記事を読むことをお勧めします。

これらの記事を読んだ後、これを実装する方法について疑問がある場合は、高度に保守可能な Web サービス プロジェクト を参照してください。これは、WCF と Web API の両方を使用してこれらの概念を適用する方法を示す参照アーキテクチャ アプリケーションです。

于 2013-04-22T16:40:35.020 に答える