2009-04-20 11 views
1

私はビジネスロジックのためにWCFサービスに接続するWebアプリケーションを持っています。パフォーマンスと相互運用性の理由から、WCF境界でデータを転送するために単純なDtoを使用したいと思います。型付きデータセットとDtos

ただし、データアクセスには型付きデータセットを使用する必要があります(ORMまたはその他のオプションは政治的理由から利用できません)。

Dtoと型付きデータセットを併用することをお勧めします。誰もこれをやったことがありますか推奨パターンはありますか?そして最も重要なのは、入力されたデータセットからDtoを自動生成するためのライブラリ/ツール/メソッドがあることです。

答えて

0

型付きのDataRow-s、DataTable-sを使用することをお勧めします。型付けされたDataRowオブジェクトとDtoオブジェクトの違いはあまりありません。 性能が良いことをテストする必要があります。普通のDto-sが役に立ちます(私はそれを疑う)。 相互運用性については、型付きのDataRow-sはプレーンなクラスなので、Dtoオブジェクトと相互運用可能です。

+0

まあDTOとしてでDataRowを使用しての問題は、それらがDataContractsでマークされていないです。それらは直列化さえできません。私たちは、Dtosとシリアル化データセットの違いをテストしました。パフォーマンスに大きな影響があります。 – Ender

2

エンティティの翻訳パターンが気になります。 http://msdn.microsoft.com/en-us/library/cc304747.aspx
まあ、それに変わるかもしれません。

私は最近類似したことをしなければならず、datarow/datatableなどに格納されたデータをデータコントラクトオブジェクトに変換する別の「レイヤー」を作成しました。サービスレイヤーは、データアクセスメソッドの結果をパラメーターとしてこの新しいレイヤーメソッドを呼び出すことができます。

はここ迅速かつ汚い擬似コードの例です:

public class personTranslator 
{ 

    public static PersonDataContract TranslateToContract(Datarow personDataRow) 
    { 
     PersonDataContract resultPerson = new Person; 
     resultPerson.FirstName = personDataRow["FirstName"]; 
     resultPerson.LastName = personDataRow["LastName"]; 
     . 
     . 
     [etc.] 

     return resultPerson; 
    } 
} 

SERVICELAYERクラス

public PersonDataContract GetSpecificPerson([Parameters]) 
{ 
    [other setup/validation code...] 
    return PersonTranslator.TranslateToContract(PersonDataAccess.GetPersonRow([Parameters])); 
} 
関連する問題