2009-04-01 12 views
4

誰もがwebservicesとリポジトリパターンを統合する最良の方法を確認することはできます....まあ実際には私のリポジトリのパターンを今C#で働いている。私は3つのプロジェクト、DataAccess、サービスと私のプレゼンテーション層を持っています。C#とWCFのリポジトリパターンを持つwebservices?

問題は、私のプレゼンテーション層は、物事の数である...私はASP.NET MVCのサイトを持って、私は、WPFアプリケーションを持っていると我々は、別のサイトを作成しようとしている+外部同社はまた、私たちのリポジトリにアクセスする必要があります。

は現在、私はただの各サイトへの参照などのサービスレイヤを追加した...しかし、Webサービスを介してデータアクセスを提供するために、通常の方法ではないでしょうか? (WCF) - これが当てはまる場合、これはサービス層を破壊するでしょうか?またはサービス層をWebサービスに変換する必要がありますか?

誰でも長所と短所は、これのスピードが何であるかを知っています?

答えて

0

まず、すべての呼び出し元が同じリポジトリAPIを使用する必要はありません。これは外部企業にとって特に当てはまります。

WCFはインターフェイスベースです。これは、の場合、ロジックコードを再利用する必要がある場合、アセンブリ共有を使用してIoC/DIを使用してDAL(ただし同じインターフェイスを使用)ではなくWCFを注入することが可能であることを意味します。これは、あなたがやっていることですね。これは多くの場合に有効ですが、すべてではありません。基本的にWebサービスベースのAPIは、しばしば、最適になるように別々に設計する必要があります。また、SOAの観点からは100%純粋ではありませんが、ジョブが完了し、よりインテリジェントなドメインエンティティが許可されるため、イントラネット(など)のシナリオでは完全に合理的です。

私はいっぱい持っている場合

+0

返信いただきありがとうございます。はい、現在のWPFとASP.NETで私はリポジトリパターの純粋な形式でアセンブリ共有を使用しています - 例.. 1つのメインデータアクセスレイヤーと1つのメインサービスレイヤーがあり、asp.net mvcとwpfにはサービスレイヤー... –

+0

asp.net mvcとwpfプレゼンテーションレイヤーは同じで、実際にはアプリケーションにアクセスする別の方法です。私はWCF(Webサービス)を設計しても大丈夫です - ここではどうなりますか? WCFは呼び出すサービスへの参照を持ち、Webメソッドを提供しますか? –

0

たぶんWebサービスは、最善の方法ではありません...外部の発信者は通常はちょうど(組立共有するのではなく)WSDL/MEXベースのAPIを使用しますが、何でも可能ですサービスアセンブリへのアクセスは、アプリケーションとサービスレイヤのアセンブリを常に共有するほうが良いと思います。

私のアプリケーションでは、同様のことを行うが、それらはすべて、サービス層にアクセスする必要がある - この場合

...よくビジネスロジックをし、情報を取り戻す - そのサービス層でアセンブリの共有を使用することが常に望ましいですHTTPプロトコルを使用してWCF Webサービスを提供するのではなく、wcfでTCPを使用するのではなく、

おかげで再び

3

私は私はあなたのジレンマを理解すると思います。私が正しく理解していれば、あなたのサービス層は純粋な製作から成っています。 http://en.wikipedia.org/wiki/GRASP_(Object_Oriented_Design)

私が正しく上記と仮定した場合、その後、あなたのサービス層は、WCFの導入によって全く影響を受けてはいけません。基本的にWCFは、UIプレゼンテーションレイヤーとビジネスロジックレイヤーの間に置かれた相互運用性を提供する追加のプレゼンテーションレイヤーです。 WCFサービスは、必要に応じてリポジトリにアクセスできるサービスレイヤを呼び出します。私はそれが優れた選択肢だと思うので、

WCFは、相互運用性の高い学位を提供します。私はbasicHttpバインディングを使用しますが、これは最も柔軟なので、さまざまなプログラミング言語と相互運用するつもりです。速度について心配しないでください。 WCFに起因するボトルネックを軽減するためのソリューションはたくさんあります。

幸運、と私は他の方法で助けることができるなら、私に知らせてください。

+1

私は+ 1に投票しましたが、あなたの投稿に間違いがあるかもしれないと思います:basicHttpは、ASP.NET ASMXスタイルのWebサービス(WS- *をサポートしていない、制限されていました)の下位互換性サポートを提供するためにのみ存在します。柔軟性とさまざまなプログラミング言語(Java、C++など)との互換性が必要な場合は、wsHttpを使用する必要があります。 – jrista

+0

訂正していただきありがとうございます。私の同僚の一人がより相互運用性があると主張していたので、私は仕事場でbasicHttpに切り替えました。私はあなたのコメントと私があなたのコメント以来従事している研究を彼と共有するのを待つことができません。とても有難い! – mkelley33

+0

また、互換性に関するコメントについての2つの注記:.net 3.0フレームワークをターゲットにする必要がある場合、またはSilverlight 2.0を使用する場合、wsHttpBindingはサポートされていないため、basicHttpBindingを使用する必要があります。jrista JavaやC++との互換性に関する私の同僚に提供できるリンクやリファレンスはありますか?再度、感謝します。 – mkelley33

0

サービス/ APIアセンブリをクライアントアプリケーションと共有するかどうかは、かなり主観的です。あなたが完全なマイクロソフトのショップであり、アプリケーションスタック全体で.NETを使用している場合は、APIを共有するとコードの再利用が可能になります(APIをどのように設計するか注意する必要がありますクライアントアプリケーションを他のプラットフォームに移行する予定がない場合(つまり、近い将来に.NET上にとどまる予定の場合)、私はその共有を完全に容認していると思いますあなたのサービス/ APIアセンブリ(そして、マルチプラットフォームのクライアント環境でさえ、.NETクライアントとサービス/ APIを共有することは依然として受け入れられるべきです)。「アーキテクチャ上理想的」と「実用的かつ達成可能」の間には常にトレードオフがあります予算内で。あなたは、建築的に理想的なものを実現しようとすると、多くの時間、お金、努力を費やすことができます。その間にギャップが現実的ではないことがよくあります。 「正しい」SOAを維持するためにAPIを共有して再作成することは、契約を消費するだけで、実際には作業を増やし、この特定の時間にあなたの特定のプロジェクトにとって価値のないメンテナンスの手間をかけることになります。あなたはすでに一般的に「サービス指向」であることを考えると、将来の時点で顧客が契約上のみの消費で提供できる利益が必要な場合は、既にそこに行くように設定されています。しかし、あまりにも早く押しすぎないでください。

これまでのところ私がこれらの投稿から集めることができたことから、私は自分のサービスから正しい道を選んだと思います。リポジトリ(a la Evans、DDD)は確かにドメインの関心事であり、プレゼンテーション層の視点からは心配する必要はありません。サービスは、ビジネスロジックの本拠地であるドメインへのゲートウェイです。リポジトリは、データストアからドメインを分離するのに役立つ単なるサポート機能です(実際には栄光のコレクションであり、非常に率直です...ダイナミックで複雑なドメインでは苦労する可能性があります)単純なデータマッパー、 (Fowler、PofEAA)は、多くの場合、長期的には扱いやすく、複雑ではなく、データ検索ロジックをより集中的に処理してドメインサービスに集中させることができます。)AJAXのRESTサービスあなたのドメインの周りに適切なサービス/ APIを公開すれば、それがあなたのクライアントが心配するべき唯一のことです。残りのすべてのビジネスロジックをドメインの範囲内で完全に包括し、クライアントを可能な限り軽量に保ち、 'Repository'や 'Data Mapper'などの概念から抽象化します。

私の経験では、クライアントとドメインの境界を越えて共有する必要がある唯一の非サービスまたはAPIのコンセプトはコンテキスト...であり、サービス指向のアプリケーションではその境界を越えることは難しい。

関連する問題