2009-05-29 2 views
0

PostSharpをEntity-to-DTOとDTO-Entityマッパーに使用することを検討しています。約100の実体についてそのタスクを手作業で行うことは、保守の悪夢となるだろう。私はcodeplexでAutoMapperを見てきましたが、私はPostSharpがマッピングの規約をいくらか余分にコントロールできると感じるだけでなく、オーバーヘッドが重大な問題になるかもしれないと思います。誰かがこの問題の王と何か経験を分かち合うことができれば、それは素晴らしいことです。私はクラスに固執するプレーニングいます局面は、コンテンツと、次の2つのメソッドを埋めるだろうオブジェクトマッパーのPostSharp

:私は考えてい

方向は、この(これが不可能な場合誰かが私に教えてください)のようなものです:

EntityType EntityToDTO(DTOType DTO) {} 

DTOType DTOToEntity(EntityType Entity) {} 

最初のメソッドはDTOに基づいてエンティティを返し、2番目のメソッドはopositeを行います。アスペクトの中で私は各プロパティをループする予定で、新しいターゲットを作成し、プロパティの値をターゲットオブジェクトの対応するものに設定します。実行時のオーバーヘッドとは別にコンパイル時にこれを行うことは可能ですか?あなたのDTOのフィールド名は、エンティティのフィールド名と一致した場合

+0

なぜオーバーヘッドが問題になるのですか?あなたはそれを測定しましたか? – Paco

+0

あなたがやっていることは簡単な言い回しで簡単に達成できます。リフレクションはパフォーマンスに関して悪いラップを取得しますが、正に、あなたが思うほどのパフォーマンスヒットはありません。 Reflectionは、.NETフレームワークのあらゆる場所で使用され、多くのことを処理します。心の衰えの速さを必要とするものをやっていない限り、リフレクションがうまくいくはずです。データベースから情報をネットワークから取り出すのに要する時間は、ちょっとした反省よりもスケールの大きさが遅いです。パフォーマンス全体はほとんどの認識です。 – Josh

答えて

1

は、その後、私はあなたのコードは基本的にこの

UserDTO user = DuckTyping.Cast<UserDTO>(userEntity); 

のように働くだろう

http://www.deftflux.net/blog/page/Duck-Typing-Project.aspx

http://haacked.com/archive/2007/08/19/why-duck-typing-matters-to-c-developers.aspx

タイピングダックを使用したいですダックタイピングライブラリは、名前を照合することによってフィールド上にマッピングされます。彼らはこれをアーカイブするために動的に生成されたILを使用します。

もしそれが遅すぎる可能性があるなら、私はおそらく私のための方法を生成するCodeSmithを取得しようとします。

1

それが助け場合は、基本的にEntity Frameworkの1を参照してくださいhttp://www.codeplex.com/efcontribにPOCOオブジェクトのサポートを実装してPostSharp4ETというプロジェクトがあります。

PostSharpは新しいコードを生成するにはあまりよくありません。新しいコードと既存のコードを混在させるのは良いことです。コードを生成する必要がある場合は、リフレクションに基づいてC#コードジェネレータを作成し、結果のコードをコンパイルすることをお勧めします。または、前述のように、CodeSmithのようなツールを使用します。

関連する問題