1

当社で AutoMapper の使用を開始したいと考えています。私のチームメンバーがそれで何の利益も見ないという問題。同じことを行う自分自身の拡張メソッドを記述できる場合に、追加の抽象化が必要な理由の主な主張。

では、私が反対することができる理由は何ですか?

4

3 に答える 3

6

Automapper に対する私の 2 つの最大の議論:

  1. 十分にテストされた規約ベースのライブラリに頼ることができるのに、なぜ独自のものを書く必要があるのでしょうか?

はい、プロパティ間でデータを移動する拡張メソッドを作成できます。しかし、型を超えてデータを送信するためだけに無数のマッピング行を書く必要があるのはなぜですか?

Property1 = original.Property1; Property2 = original.Property2;

特に次のようなことをしている場合:

Property1 = (MyEnum)Enum.Parse(typeof(MyEnum), original.Property1);

書くのに時間がかかる厄介な配管コードであり、便利な機能を構築するなど、このようなことをいじるなど、時間をもっと有効に使うことができます。AutoMapper は、最初のケースを無料で完了するために必要なすべての規則と、形状を縮小したり型を変更したりするより複雑なシナリオを管理するための単純なパターンを提供します。

  1. マップ自体は簡単にテストできます。

ここでも、独自のメソッドを作成できます。ただし、正しく実行している場合は、記述したカスタム コードに固有のすべてのケースをカバーする対応するテストがあります。 または、マップをロードして、マッピング構成が正しいかどうかを AutoMapper に尋ねることもできます。

Automapper に対する私の注意点:

  • 構成に依存することをほとんどやめてしまうほどの例外をマップに書き込む必要が生じ始めた場合、それは漏れやすい抽象化になる可能性があります。(実際には、問題はおそらくドメインの設計にあり、AutoMapper は上流の問題を示す最初の制約にすぎません)。

これがマッピング コードの万能薬であると言っているわけではありませんが (癖があります)、ソリューションに適合するかどうかを確認するためにスパイキングに費やした時間は、投資する価値があります。

于 2012-07-16T18:27:24.110 に答える
5

AutoMapper は、ある型を別の型にマップするだけのコードがたくさんある場合に便利です。

これを自問してください。ハードコーディングされたマッピングや、AutoMapper のようなフレームワークのセットアップなど、開発と保守にかかる時間を短縮できるものはどれですか?

次の主題は、自動マッピング フレームワークがシナリオに役立つかどうかを判断するのに役立ちます。

  • バルク。マッピング専用のコード行数は? いくつのエンティティをマップする必要がありますか? 10? 100? 1000? コードの行数が多いほど、このフレームワークのメリットが大きくなります
  • 複雑さ。マッピングはどのくらい複雑になりますか? それはすべて基本的な 1 対 1 のマッピングですか? オブジェクトを拡張または平坦化する必要がありますか? 複雑なシナリオの場合、ほとんどの場合、自動マッピング フレームワークによって制限されます。
  • 非マッピング。現在のマッピング コードは、実際には 100% マッピング オブジェクト専用ですか? データの解析やビジネス ルールのチェックなど、他に行うことはありますか? マッピング コードの責任が増えるほど、自動マッピング フレームワークの有用性は低くなります。
于 2012-07-16T18:23:09.127 に答える
0

トランザクショナル アプリ (3NF データベースに対する多数の CrUD 操作) の一般的な課題は、3NF データベースをオブジェクト モデル (つまり、ビジネス オブジェクト/クラス) にマップし、その後再びプレゼンテーション層にマップする必要があることが多いことです。データベースはデータをタプル (行と列) として保存し、アプリではデータはタプル (つまり、グリッド) として表示されることがよくありますが、オブジェクト モデルはグラフです。つまり、2 次元 (db) から 3 (ビジネスロジック) を 2 (グリッドとして表示) に戻します。ORM マッパーは 3NF をオブジェクトに変換するのに役立ちますが、ユーザーの画面で表現するためにオブジェクトをフラット化するには、プレゼンテーション固有のクラスを作成する必要があります。

Automapper は、このようなシナリオや他の多くのシナリオで、あるタイプ (ビジネス オブジェクト) から別のタイプ (データ転送オブジェクト) へのマッピングに最適です。

于 2012-07-16T18:32:24.357 に答える