2009-11-05 10 views
5

私は、アプリケーションを提供するアプリケーション用のwcfサービスを構築する段階にあります。アプリケーションの下にドメインモデルと永続性レイヤーがあります。データアクセスレイヤーをWCFサービスに移動

サービスについては、同様のドメインモデルと永続性レイヤーが必要です。私は物事を複製したくないので、図書館を共有したり、アプリケーションとサービスを結合したりしたくない。

これは、別のサービス(または作成しているこの新しいサービスで実装している)を作成してデータアクセスレイヤーを作成し、アプリケーションからのデータアクセスにそのサービスを使用する必要があると考えているため、アプリケーションとサービスの両方で共有されているデータアクセスレイヤーは1つだけです

これは良いパターンですか、私には大きな問題がありますか?そうなら、あなたの提案は何ですか?ありがとう!

答えて

1

私は以前と同じ状況にいました。最初は開発中にデータアクセス用のwcfサービスがなかったので、データアクセスにnhibernateを使用しました。

client app -> Repository Interfaces -> Repository Implementations(最初はnhibernateを通してデータを取得し、2番目の実装はwcf経由でデータを取得しました)このように、データ取得のための直接nhibernateアクセスからwcfサービスへの切り替えを容易にしました。

あなたのアプリケーションコードから実装の詳細を隠すインターフェースを持つことが、あなたの問題に適した解決策になるかもしれません。 (btw、nhibernateのデータアクセスコードは主にサーバー側で再利用されていたので、捨て去る必要はありません)。

+0

これはまさに私の状況で、nhibernateも使用しています。私はリポジトリインタフェースを持っていて、別のライブラリにリポジトリ実装をしています。私が見ることができるサービスを介してこれを行う具体的な例がありますか? – kaivalya

+0

私はコードベースにアクセスできません。申し訳ありません。ただし、クライアントアプリケーション内からインタフェースにアクセスするだけであれば、実際の実装について気にする必要はありません。 wcfを介してnhibernateエンティティを送信する場合は、遅延ロードされたコレクションでシリアル化の問題を処理します。 wcfはnhibernateプロキシを気に入らない –

1

リソースアクセスレイヤーとしてWCFサービスがある場合は、WCF Webサービスがデータ交換のエンドポイントであるため、既存のデータアクセスレイヤーをクライアントアプリケーションから移動することができます。現時点で

クライアントアプリケーション< - >データベースアクセス

これは悪い習慣、それは公共のデータベースを公開され、データベースのポートはデフォルトでブロックされている場合があります。 Webサービスとの

クライアントアプリケーション< - > Webサービス(データベースアクセス)が

これは、適切なセキュリティ実装(HTTPSおよび認証)を持っている必要があります。 Webサービスは、通常、フレンドリーなポート80でホストされているため、基になるデータベースを公開する必要はありません。

+0

これは間違いです。あなたは何を話しているのか知らない。 – DarthVader

-1

あなたのアプリケーションには1つのデータアクセス層しかないはずです。したがって、サービスを作成してそこからデータを取得する場合は、クライアントからすべての直接データ接続を削除してください。

これは、データベースをパブリックにする必要はなく、誰かがデータベースを改ざんする可能性は非常に低いということも意味します。

関連する問題