検索
ホームページバックエンド開発C#.Net チュートリアルAutoMapper を使用して Dto と Model 間の自由な変換を実現する (パート 1)

実際のソフトウェア開発プロジェクトでは、多くの場合、「ビジネス ロジック」により、同じデータに対してさまざまな変換を実行する必要があります。たとえば、Web アプリケーションはフロントエンドを通じてユーザー入力を Dto に収集し、Dto をドメイン モデルに変換してデータベースに保存します。一方、ユーザーがデータを要求した場合は、その逆のことを行う必要があります。つまり、データベースからクエリされたドメイン モデルを逆の方法で Dto に変換し、ユーザーに提示する必要があります。場合によっては、複数のクライアントがデータを使用するなど、より多くのデータ使用要件に直面することもあります。そのため、より多くのデータ変換を実行する必要もあります。
頻繁なデータ変換は些細で面倒な作業です:
(1) 2 つのタイプは名前が異なるだけですが、ほぼ同様の構造を持っています。ただし、タイプ間のデータ転送は、属性 1 を手動で割り当てることによってのみ実現できます。 「伝達」によって。
(2) 新しいデータ変換シナリオが発生するたびに、一連の変換ロジックが手動で実装され、その結果、データ変換操作が繰り返され、アプリケーションの隅々に分散されます。
「オレンジ」を私たちが望む「リンゴ」に変えることができるそのような「トランスフォーマー」のようなツールがある場合、私たちがしなければならないことは、変換ルールを定義することだけです - 実際のビジネスロジックを実行するか、または単純なシナリオで実行するだけですルールを定義する必要はありません (設定よりも規約)、これは非常に美しいことです。実際、強力なオブジェクト間マッピング ツールである AutoMapper があるため、.NET で車輪を再発明する必要はありません。
実際、私が取り組んでいるプロジェクトは上記の「混乱」を経験しているのですが、AutoMapper は本当に明るい気持ちをもたらしてくれます。そこで、週末のちょっとした休暇を利用して AutoMapper を試してみたところ、小さなアプリケーション シナリオを通じて Dto とドメイン モデルのマッピングを実現し、その「強力なオーラ」を実感しました。同じように混乱しているあなたの助けになればと思い、この記事で私の使用経験を共有します。完全なプロジェクト コードは後で私の git リポジトリにリリースしますので、どなたでも自由に参照していただけます。
【1】アプリケーションシナリオの説明
まず、「仮想」ドメインモデルを見てみましょう。今回は本屋 (BookStore) を定義しました:

public class BookStore

public string Name { set; }

パブリック アドレス アドレス {get; set;}

}

書店には独自のアドレス (アドレス) があります:

C# コード

public クラス Address


{

public string Country { get; set;

public string City { get; }

public string PostCode { get; }書店で:

C# コード

{

パブリック文字列 説明 { 取得; }

public 10 進数 { get; set; }

public DateTime { get; set; public int { get; set;

}


各書籍には出版社情報があります:

C# コード

public string Name { get; set;

}

各書籍には最大 2 つの著者情報 (著者) を含めることができます:

C# コード

public class Author

{

public string Name { get; set;

public string description { get; set; }

public ContactInfo ContactInfo { get; }

}


C# コード

public class ContactInfo

{

public string Email { get; set; }

public string Twitter { get; 構造ドメインモデル。

Dto 構造をもう一度見てみましょう。

Dto には BookStore に対応する BookStoreDto があります:

public class BookStoreDto

{

public List
public string PostCode { get; }


C# コード

パブリッククラス BookDto

{

パブリック文字列 { 取得; セット; }

パブリック 10 進数

public DateTime { get; set; }

public string FirstAuthorName { get; } FirstAuthorDescription { 取得; }

パブリック文字列 FirstAuthorBlog { 取得; }

パブリック文字列 SecondAuthorDescription { 取得; }

パブリック文字列 SecondAuthorTwitter { 取得; }

BookDto は、ブック全体の階層構造を「平坦化」していることに注意してください。BookDto は、ブックとそのすべての著者、発行者、その他のモードのデータを保持します。

Dto から Model へのマッピング ルールを見てみましょう。

(1) BookStoreDto -> BookStore のフィールド

BookStoreDto フィールド

Name Name

Books Books

Address Address

(2)AddressDto -> Address

フィールド住所のDtoフィールド

都市

都市

通り

郵便番号


(3) BookDto -> Book。
BookDto の一部の基本フィールドは Book のフィールドに直接対応できます。

Book のフィールドDto Book のフィールド

Title タイトル

Description 説明

Language 言語

Price 価格

Pub lishDate PublishDate

Paperback ペーパーバック


各書籍には次の​​場所がありますBookDto の著者のほとんど 2 名 フィールドで表されるそれぞれ「First」と「Second」という接頭辞が付きます。したがって、すべての FirstXXX フィールドは Book の Authors の最初の Author オブジェクトにマップされ、すべての SecondXXX フィールドは Authors の 2 番目の Author オブジェクトにマップされます。

BookDto のフィールド BookDto の著者の 1st Author オブジェクトのフィールド

FirstAuthorName 名前

FirstAuthorDescription 説明

FirstAuthorEmail ContactInfo.Email

FirstAuthorBlog ContactInfo.Blog

FirstAuthorTwitter ContactInfo.Twitter


ContactInfo.Email に注意してください上の表の は、Author オブジェクトの ContactInfo に対応する Email フィールドを表します。同様に、次のようになります。

BookDto のフィールド Authors in Book の 2 番目の Author オブジェクトのフィールド

SecondAuthorName Name

SecondAuthorDescription 説明

SecondAuthorEmail ContactIn fo.Email

SecondAuthorBlog ContactInfo.Blog

SecondAuthorTwitter連絡先情報 .Twitter


最後に、Publisher フィールドがあります。これは、独立した Publisher オブジェクトに対応します。

出版社の BookDto フィールド

出版社名


必要なのは、この大きな Dto から別の大きなモデルにデータを変換することです。


声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
C#と.NET:2つの関係を理解し​​ますC#と.NET:2つの関係を理解し​​ますApr 17, 2025 am 12:07 AM

C#と.NETの関係は切り離せませんが、同じものではありません。 C#はプログラミング言語であり、.NETは開発プ​​ラットフォームです。 C#は、コードの書き込み、.NETの中間言語(IL)にコンパイルされ、.NET Runtime(CLR)によって実行されるために使用されます。

c#.netの継続的な関連性:現在の使用法を見るc#.netの継続的な関連性:現在の使用法を見るApr 16, 2025 am 12:07 AM

C#.NETは、複数のアプリケーション開発をサポートする強力なツールとライブラリを提供するため、依然として重要です。 1)C#は.NETフレームワークを組み合わせて、開発を効率的かつ便利にします。 2)C#のタイプの安全性とゴミ収集メカニズムは、その利点を高めます。 3).NETは、クロスプラットフォームの実行環境とリッチAPIを提供し、開発の柔軟性を向上させます。

Webからデスクトップまで:C#.NETの汎用性Webからデスクトップまで:C#.NETの汎用性Apr 15, 2025 am 12:07 AM

c#.netisversatileforbothwebanddesktopdevelopment.1)forweb、useasp.netfordynamicapplications.2)fordesktop、equindowsorwpfforrichinterfaces.3)usexamarinforcross-platformdeveliment、enabling deshacrosswindows、

c#.net and the Future:新しいテクノロジーへの適応c#.net and the Future:新しいテクノロジーへの適応Apr 14, 2025 am 12:06 AM

C#と.NETは、継続的な更新と最適化を通じて、新しいテクノロジーのニーズに適応します。 1)C#9.0および.NET5は、レコードタイプとパフォーマンスの最適化を導入します。 2).Netcoreは、クラウドネイティブおよびコンテナ化されたサポートを強化します。 3)ASP.Netcoreは、最新のWebテクノロジーと統合されています。 4)ML.NETは、機械学習と人工知能をサポートしています。 5)非同期プログラミングとベストプラクティスはパフォーマンスを改善します。

c#.netはあなたにぴったりですか?その適用性の評価c#.netはあなたにぴったりですか?その適用性の評価Apr 13, 2025 am 12:03 AM

c#.netissuitableforenterprise-levelApplicationsとsystemduetoitsSystemdutyping、richlibraries、androbustperformance.

.NET内のC#コード:プログラミングプロセスの調査.NET内のC#コード:プログラミングプロセスの調査Apr 12, 2025 am 12:02 AM

.NETでのC#のプログラミングプロセスには、次の手順が含まれます。1)C#コードの作成、2)中間言語(IL)にコンパイルし、3).NETランタイム(CLR)によって実行される。 .NETのC#の利点は、デスクトップアプリケーションからWebサービスまでのさまざまな開発シナリオに適した、最新の構文、強力なタイプシステム、および.NETフレームワークとの緊密な統合です。

C#.NET:コアの概念とプログラミングの基礎を探るC#.NET:コアの概念とプログラミングの基礎を探るApr 10, 2025 am 09:32 AM

C#は、Microsoftによって開発された最新のオブジェクト指向プログラミング言語であり、.NETフレームワークの一部として開発されています。 1.C#は、カプセル化、継承、多型を含むオブジェクト指向プログラミング(OOP)をサポートしています。 2。C#の非同期プログラミングは非同期を通じて実装され、適用応答性を向上させるためにキーワードを待ちます。 3. LINQを使用してデータ収集を簡潔に処理します。 4.一般的なエラーには、null参照の例外と、範囲外の例外インデックスが含まれます。デバッグスキルには、デバッガーと例外処理の使用が含まれます。 5.パフォーマンスの最適化には、StringBuilderの使用と、不必要な梱包とボクシングの回避が含まれます。

テストC#.NETアプリケーション:ユニット、統合、およびエンドツーエンドテストテストC#.NETアプリケーション:ユニット、統合、およびエンドツーエンドテストApr 09, 2025 am 12:04 AM

C#.NETアプリケーションのテスト戦略には、ユニットテスト、統合テスト、エンドツーエンドテストが含まれます。 1.単位テストにより、コードの最小ユニットがMSTEST、ヌニット、またはXUNITフレームワークを使用して独立して動作することを保証します。 2。統合テストでは、一般的に使用されるシミュレートされたデータと外部サービスを組み合わせた複数のユニットの機能を検証します。 3.エンドツーエンドのテストでは、ユーザーの完全な操作プロセスをシミュレートし、通常、セレンは自動テストに使用されます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター