AutoMapperの役割
- AutoMapperの機能は、あるオブジェクトを別のオブジェクトに変換し、毎回変換することを回避することです。
- DTOを使用してプレゼンテーション層とドメインモデルの分離を実現し、AutoMapperを使用してDTOとドメインモデル間の相互変換を実現します。
基于访问性的控制或从模型本身上考虑。对外开放的原则是,尽量降低系统耦合度,否则内部一旦变更外部所有的接口都要跟随发生变更;另外,系统内部的一些数据或方法并不希望外部能看到或调用。类似的考虑很多,只是举个例子。系统设计的原则是高内聚低耦合,尽量依赖抽象而不依赖于具体。这里感觉automapper就是使数据库实体对一个外部调用实体的转换更简便(不用一个属性一个属性的赋值)。
AutoMapperは、流暢な構成APIを使用して、オブジェクトとオブジェクトのマッピング戦略を定義します。
AutoMapperは、規則ベースの照合アルゴリズムを使用して、ソース値と宛先値を照合します。
AutoMapperは、複雑なオブジェクトモデルをDTOやその他の単純なオブジェクトにフラット化するモデル投影シナリオを対象としており、その設計は、シリアル化、通信、メッセージング、またはドメインとアプリケーション層の間の単に腐敗防止層に適しています。
AutoMapperは、次のプラットフォームをサポートし
ます。.NET4.6.1+
.NET Standard 2.0+
公式ウェブサイト:http://automapper.org/
ドキュメント:https://automapper.readthedocs.io/en/latest/index.html
GitHub:https://github.com/AutoMapper/AutoMapper/blob/master/docs/インデックス.rst
DTOとは何ですか?
DTO(Data Transfer Object)は、データ転送オブジェクト(貧血モデル)です。率直に言って、オブジェクトですが、すべてデータです。
なぜDTOを使用するのですか?
- DTOはデータにより多くの注意を払い、ドメインオブジェクトの動作をプレゼンテーション層に過度に公開しないように、ドメインオブジェクトを合理的にカプセル化します。
- DTOはUIのニーズに合わせて設計されていますが、ドメインモデルはビジネス用に設計されています。したがって、DTOはプレゼンテーション層との対話に適しています。DTOを通じて、プレゼンテーション層とドメインモデル間の分離を実現するため、ドメインモデルを変更してもUIレイヤーには影響しません。
- 簡単に言うと、DTOは単なるデータであり、ビジネスロジックは含まれていません。スリムタイプ(貧血とも呼ばれます)のオブジェクトであり、さまざまなUI要件に応じて柔軟に使用できます。
アプリケーションシナリオ
- 外部サービスインターフェースデータモデル。
- UIレイヤービューモデル。
- ユーザーの入力および出力パラメーター化モデル。
モデル変換マッピングを実現するためにasp.netコア3.1.xでAutoMapperを適用するにはどうすればよいですか?
- Microsoft Visual Studio Enterprise 2019版本16.6.4;
- .net core 3.1.7;
- NugetダウンロードAutoMapper.Extensions.Microsoft.DependencyInjection-バージョン8.0.1ダウンロード
1.次のように新しいプロジェクト[UseAutoMapperDemo]を作成します。
2. Nugetを使用して、プロジェクトに依存パッケージをインストールします。
Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection -Version 8.0.1
作成したプロジェクトを変換し、2つのモデルクラス[PersonAとPersonB]を新しいフォルダー[Model]に追加して、後続のデモンストレーションを容易にします。
2. AutoMapperマッピングルールを作成する:[Model]フォルダーに新しいクラス[AutoMapperProfile]を作成して、モデルのマッピングルールを構成します。
3.スタートアップのConfigureServicesにAutoMapperを追加します。
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
#region 添加AutoMapper
services.AddAutoMapper(typeof(AutoMapperProfile));
#endregion
}
//注意:引入对应的命名空间;
using AutoMapper;
using UseAutoMapperDemo.Model;
4.IMapperをControllerコンストラクターに挿入します。
#region 注册IMapper
private readonly IMapper mapper;
public ValuesController(IMapper mapper)
{
this.mapper = mapper;
}
#endregion
5.AutoMapperを使用してオブジェクト変換を実現します。
//单对象转化
var personB = mapper.Map<PersonB>(personA);
//List集合对象转化
var personBs = mapper.Map<List<PersonB>>(personAs);
上記のコンテンツは、asp.netコア3.1.x apiプロジェクトでのAutoMapperの基本的な使用法です。詳細については、公式Webサイトを確認してください。
デモプロジェクトのダウンロード:UseAutoMapperDemo.zip