2012-01-27 3 views
2

私は、WCFサービスがデータレイヤーを呼び出し、返されたデータを含むオブジェクトを持っていて、それをデータコントラクトに入れることをお勧めします。私の質問は、データコントラクトをデータレイヤーに貼り付けずに代わりに返すのはなぜですか?それには不利な点はありますか?理由は私のデータ層は単なるクラスライブラリであり、私はWebサービスを使用していないかもしれない複数のプラットフォームから呼び出せるようにしたいと考えています。私はこれに関してベストプラクティスを見つけることができないようです。何か案は?データコントラクトWCFはどこに置くのですか?データレイヤーに入れてもよろしいですか?

答えて

5

契約者をデータレイヤーに置くことの欠点は、データレイヤーをサービス契約に結び付けていることです。実際には互いに関係する必要はありません。理想的には、あなたのデータ担当者は、スズについて何を言っているのかを担当しなければなりません。あなたが探しているものはData Transfer Objects(DTO's)です。彼らはあなたのクライアントにデータを転送するだけです。サービス層では、必要なことを行うためにこれらをそれぞれのエンティティに変換することができます。これはオーバーヘッドを引き起こしますが、DTOとエンティティを前後にマッピングする方法が必要です。例えば、AutoMapper

+0

ありがとう、私はこれを見ていきます。本質的に同じことをする2つのオブジェクトを作成しても、冗長性があります。 – KingOfHypocrites

+0

同じように見えるかもしれませんが、同じことはしません。 DTOはただ一つのことを行い、データを転送します。彼らはあなたのプレゼンテーション層にデータを移送するためだけに使用されるので、彼らは "ダム"で、彼らは何も行動を含むべきではありません。エンティティ(またはPOCOのもの)は通常、ドメインモデルの外観を表します。 AutoMapperを使用すると、これを簡単に実行できるようになります。 – diggingforfire

+0

死に至らないように...しかし、DataContractsには何の振る舞いもなく、データの格納にのみ使用されているとは言えませんか?これは彼らをDTOにしませんか?だから本質的に私は私のDALで定義された型を返すという事実はカップリングの問題だと言っているのですか?したがって、すべてのデータコントラクトをサービスレイヤと同じレイヤに定義しますか? – KingOfHypocrites

関連する問題