はじめに
この記事は、.NETプラットフォーム上の分散システムの開発者および設計者を対象としています。 オブジェクトからオブジェクトへの変換(以降、マッピング)の柔軟なフレームワークを検討します。
ドメイン駆動設計のいくつかの側面についても説明します。
オブジェクトとオブジェクトのマッピングが必要なのはなぜですか?
DDDの基本原則に従って、いわゆる
リッチドメインモデルを実装します(これらのオブジェクトは
POxO原則にも準拠する必要があります)。 アプリケーションに反映される現実世界のオブジェクトも十分な複雑さを伝えることが多いため、十分に正しく構築されたモデルをアプリケーションレイヤー間で移動することは非常に困難です(変更の容易さと混同しないでください)。

それにもかかわらず、たとえばエンティティの属性をユーザーに表示する(
MVxプレゼンテーションテンプレートで )ために、レイヤー間でモデルの「配布」(モデルをレイヤーに拡散するのではなく、中間エンティティを作成すること)が必要になることがよくありますサービス別(
データ転送オブジェクト )。 特定の側面をテストするためにモデルが「分散」されることさえあります。 私たちがアフリカにいて、バナナ農園があり、すべてがクールで、成長し、販売し、成長し、販売するとしますが、国内市場が突然溢れ、拡大する必要があります(たとえば、バナナをロシアに送る)、私たちはバナナ。 アフリカのバナナはロシアとは少し異なる意味を持っているため、それに応じて、DTOで削除するいくつかの属性(残りは実際には関係ありません)だけが必要です。
BananaWrapperクラスにその機能的な目的を正確に表示するためにBananaDTOという名前を付ける方が正しいでしょうが、たとえば、バナナ販売機を作成してこのオブジェクトをプレゼンターモデルに配置する必要がある場合など、より高いレベルの抽象化のために名前をそのままにしておきます
オブジェクトを変換するタスクが非常に簡単になり、せいぜい次のように見えることに注意してください(この解決策は対面で、さらに洗練された方法があります;)):
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
-
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
-
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
-
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
-
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
-
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
-
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
-
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
-
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
-
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
-
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
-
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
-
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
-
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
-
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
-
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
-
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
-
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
-
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
-
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
-
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
-
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
-
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
-
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
-
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
-
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
-
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
-
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
-
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
-
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
public class Banana { public string Country { get ; set ; } public double Price { get ; set ; } public double NationalTax { get ; set ; } public bool CocaineInjection { get ; set ; } public bool FreshForFooding { get ; set ; } public string AkunamatataName { get ; set ; } public string BananaGeneration { get ; set ; } public int Age { get ; set ; } } public class BananaWrapper { public string Country { get ; set ; } public double Price { get ; set ; } public int Age { get ; set ; } } public class BananaMapper { public BananaWrapper GetWrapper(Banana banana) { return new BananaWrapper { Country = banana.Country, Price = banana.Price, Age = banana.Age }; } } * This source code was highlighted with Source Code Highlighter .
そのようなコードを書いて喜んでくれる人はほとんどいないだろうし、それに付随してさらにそうなると思う。最近、私はそのようなタスクにしばしば会い、問題の解決策を探していた。
AutoMapper
そして、キャラクターの
AutoMapperが登場し、すぐに「聞いて、何を書いているの?」 あなたは怠け者ですか? あなたは間違いをすることを恐れていませんか? あなたが私を助けてくれませんか?!..もちろん、私は同意します、そして、私は私の問題に対する以下の解決策を得ます:
- パブリック クラス BananaMapper
- {
- パブリック BananaMapper()
- {
- Mapper.CreateMap <Banana、BananaWrapper>();
- }
- パブリック BananaWrapper GetWrapper(バナナバナナ)
- {
- return Mapper.Map <Banana、BananaWrapper>(バナナ); ;
- }
- }
*このソースコードは、 ソースコードハイライターで強調表示されました。
クラス。本当に必要なのはそれだけです。 上にある例の複雑さは、私の目にはゼロに減少しました。 AutoMapperにはどのようなメカニズムがありますか? AutoMapperは、指定されたタイプに対応するフィールドがあるかどうかをチェックし、プロパティの名前とそのタイプの両方で照合が行われます。 Product.NameやProductNameなどのニュアンスも考慮され、自動的に処理されます(すごい!)。 さらに、GetXXX()メソッドはXXXプロパティに該当します(もちろん、特にイライラさせるものについては、これらすべてのチャームをオフにして、独自の通信テーブル(以下、マップと呼びます)のすべてで再定義できます)。 カスタム構成は次のようになります。
- Mapper.CreateMap <CalendarEvent、CalendarEventForm>()
- .ForMember(dest => dest.EventDate、opt => opt.MapFrom(src => src.EventDate.Date))
- .ForMember(dest => dest.EventHour、opt => opt.MapFrom(src => src.EventDate.Hour))
- .ForMember(dest => dest.EventMinute、opt => opt.MapFrom(src => src.EventDate.Minute));
*このソースコードは、 ソースコードハイライターで強調表示されました。
ところで、すべてのカスタム構成は、次の方法を使用して簡単に検証できます。
- Mapper.AssertConfigurationIsValid();
*このソースコードは、 ソースコードハイライターで強調表示されました。
また、以下ではうまく動作しません:
物語
プロジェクトは'08 -beginning of'09の終わりに登場し、半年ほどバージョン0.31でしたが、RC 1.0になりました。リリースはすぐに来ると思います。
オーバーヘッド?

AutoMapperがどれほど高速に動作し、プロパティ(およびその他の漫画)を手動で割り当てるかについての議論を無視します。 明確で読みやすいコードを取得できれば、パフォーマンスを犠牲にする準備ができています。 そうそう、AutoMapperの作成者はこれらの問題を処理し、ベンチマークを作成しました
。http ://code.google.com/p/automapperhome/source/browse/#svn/trunk/src/Benchmarkを参照して
ください 資源
プロジェクトをダウンロードするだけでなく、ここでソースコードに精通することができます:
http :
//code.google.com/p/automapperhome/ Wireframeのディスカッション:
http://groups.google.com/group/automapper-users使用例
http://automapper.codeplex.com/ところで、プロジェクトは
Joe Benninghovenによって開発されています
。JoeBenninghovenは、NBehaveという.NETの
BDDフレームワークも作成しています。