Amazon

2017年12月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

最近のトラックバック

無料ブログはココログ

Amazon2

« パイオニア SE-MJ512-Kを購入しました | トップページ | Microsoft Wireless Mobile 1000を購入(自宅マウス無線化計画) »

2015年5月 1日 (金)

c# 異なるオブジェクト間のデータを自動的にコピーするクラスの作製

今回は、異なるオブジェクト間のデータを自動的にコピーするクラスを作製
してみます。あるオブジェクトのプロパティやフィールド値を別のオブジェクトの
プロパティやフィールド値にコピーすると言うコードは、まじめに?.Netで
コードを記述していると、意外と書く機会が多く面倒なので自動化してみました。



通常、UIからロジックにデータを受け渡しするオブジェクトと、ロジック内でデータをやり取り
する場合に使用するオブジェクトは異なります。と、言う訳でそれらのオブジェクト間で
相互にデータをコピーする事が多いのですが、これが意外と面倒…と、言うか単純なコードを
延々と書くと言う地味な作業になります。加えて、ちょっと画面に項目を追加する度に、
このデータをコピーする箇所まで毎回直さなければならないというのが、苦痛です。
(よく忘れますし…)
と、言う訳でこんな単純作業は自動化してしまいたいと思います。

動的にクラス構成を解釈しながら実行する時は…リフレクションです。と、言う訳で試しに
書いてみたら意外と簡単に出来てしまいました。(一発で動いたからなんか不安…)

下記のコードは以下の様な仕様になっています。

・コピー対象となる物
  public なプロパティ or フィールド

・名前が同じ物同士でコピーする
  フィールド・プロパティの区別はしない

・コピーする対象クラスに制限がある
  引数無しのコンストラクタを持つ事


使い方は以下の一行を記述すると、SourceClass→DestClassに値をコピーします。(逆もできます)

var dest = AutoMapper.Map(source);


以上です。内部動作としてはリフレクションを使用して、元・先となるクラスを
解析してデータをコピーしているだけです。ちょっとだけ工夫してある点としては、
毎回クラス構成を解析していては時間がかかるので、初回のみ解析を実施し、
その後はキャッシュされた情報を基にデータをコピーするので、二回目以降のデータ
のコピーはそれなりの速度で実施される様になっている所です。




自分で言うのもなんですが、意外と便利です。データをコピーするコードを自動で
吐き出す(データコピークラスのソースを吐くツール)も考えたのですが、その路線
だと、コードの形式が変わる度に毎回手動でソースを差し替える必要があるので
動的に処理する事にしました。これだと、勝手に最新のオブジェクトに追随してくれるので
便利です。

こんな感じで、なるべく手間を減らす事で、お行儀の良いソースを作成できるはずだ…と、
信じています(笑




さて、Windows10がもうすぐですね。また、アプリの書き方も変わるらしいですが…。
Windows8時代のタブレットが全般的に値下がりしてきた気がします。思わず…?(笑




















« パイオニア SE-MJ512-Kを購入しました | トップページ | Microsoft Wireless Mobile 1000を購入(自宅マウス無線化計画) »

C#」カテゴリの記事

コメント

初めまして、ではなく2回目です。やはりC#の方がVB.NETよりも多いですね。ちょっと本を買って、勉強しています。VB.NETは敷居が低いとの噂でしたが、FORTRAN77以来あとほんの少しVC+6.0を買ってやってはみたものの難しいですね。本だけは増えていくばかりです。

私にとってはVB.NETはc#よりずっと難しいです。。。あの、わざと違う英単語を選んでいる感じがどうしても馴染めません。是非c#を触ってみて下さい。至れり尽くせりですよ。

そうなんですか?C#はJAVAに似ていると聞いたことはあります。私はまだまだ。今はファイルの開き方とかが上手くいかないレベルです。

ファイルオープンから入るとはなかなか通ですね…。C#はLinqとλ式がとっても素敵です。是非使用してみて下さい。

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1680410/59823409

この記事へのトラックバック一覧です: c# 異なるオブジェクト間のデータを自動的にコピーするクラスの作製:

« パイオニア SE-MJ512-Kを購入しました | トップページ | Microsoft Wireless Mobile 1000を購入(自宅マウス無線化計画) »