2009-06-03 10 views
2

このトピックについても同様の質問がありましたが、同じ問題を解決しているかどうかは完全にはわかりませんでした。だから、明確にする...WCF内に既存のビジネスオブジェクトを公開する

タイプ、ビジネスロジック、データアクセス用の名前空間を持つ既存のクラスライブラリがあります。ロジックおよびデータアクセス名前空間のクラスは静的であり、型インスタンスをデータで埋める基本的な方法、またはすでにいっぱいであり、データベースに挿入や更新を行う型インスタンスを取る基本的な方法があります。

ここでは、このライブラリを直接参照する既存のアプリケーションに加えて、WCFサービスも作成して、他のアプリケーションがそのようなオブジェクトと方法を使用できるようにしたいと考えています。

私が見るすべてのWCF turorialは、サービスプロジェクトにドメインオブジェクトを作成しますが、私は2つの場所でオブジェクトを定義したくありません。

私は既存のクラスライブラリで直列化を参照し、型クラスを[DataContract]とプロパティを[DataMember]としてマークすることができると考えていました。次に、WCFプロジェクトで、[OperationContract]メソッドを使用して[ServiceContract]インターフェイスを作成し、公開する既存のライブラリの静的ロジッククラスとメソッドを照合します。次に、WCFプロジェクトから、既存のクラスライブラリを参照し、既存のライブラリタイプを返す既存のライブラリロジックメソッドを呼び出すメソッドを持つことによって、WCFインターフェイスを実装します。

これは良いパターンですか?

答えて

5

それは良いと思うけど、直列化の後継化は最初のように思えるほど難しい傾向にあります。私はあなたがサービスレイヤーに軽量データコントラクトを構築し、サービスレイヤーとビジネスレイヤーの間にある小さな層を構築して、データコントラクトをビジネスオブジェクトに変換したり、その逆にすることをお勧めします。

1

ビジネスオブジェクトをシリアル化できる(シリアライズ可能な属性を持つ)と仮定すると、データコントラクトになるDataContainerオブジェクトが作成される可能性があります。このオブジェクトはCRUDメソッドで使用されます。お使いのインタフェースが次にあなたがバイト配列に、あなたのオブジェクトをパックし、それにこれを渡すために、バイナリシリアル化を使用します 更新(データコンテナOBJ) 挿入(データコンテナOBJ)

など

かもしれ例えば

WCFを経由する方法。反対側では、再度BinarySerializationを使用して逆シリアル化します。両側(クライアントとサーバー)に、ビジネスオブジェクト型のアセンブリの有効なバージョンがあることを確認するだけで済みます。

+0

ありがとうございます。実際には言及していませんでしたが、私がやろうとしていることの1つは、図書館をサービスの消費者に出荷することではありません。 –

関連する問題