質問: EFとPOCO + WCF + WPF。クライアント上でPOCOクラスを再利用するかDTOを使用しますか? WPFクライアントを使用してWCFを介してBLLと通信する3層アプリケーションを開発しています。 EFを使用してデータベースにアクセスします。 私たちはEFのデフォルトEntityObjectコードジェネレーターを使用していましたが、ワイヤを介してオブジェクトを送信したり、BLLでそれらを処理して再接続するときに、多くの問題やシリアル化の問題がありました。 私たちはPOCOテンプレートに切り替えようとしており、データアクセスとアプリケーションの通信部分を書き直しています(より洗練されたアーキテクチャーとそれほど魔法のコードがないことを望んでいます)。 クライアント側でPOCOクラスを再利用することをお勧めしますか?あるいは、別々のDTOクラスを作成する必要がありますか?彼らがPOCOエンティティクラスと同一であっても? 2つのアプローチの長所と短所は何ですか?
回答: 間違いなくDTOs + AutoMapperを使用してください。それ以外の場合は、循環依存(特にナビゲーションプロパティに問題がある)のためにWCFを使用している間に、DataContractSerializerに問題があります。最初にDTOを省略することはできますが、上記の問題のために後でDTOを使用する必要があります。だから私は、各層に適切なDTOを使用してアドバイスをします。 また、ティア固有のモデルには異なる属性が含まれます。また、各階層で実行するデータを変更(つまり、専門化)する必要があるかもしれません。したがって、あなたのプロジェクトが十分に大きい場合(あるいはその可能性がある場合)、DTOを適切な名前で使用し、適切な場所に配置します(つまり、同じアセンブリ内のすべてではありません)。