主题
对象关系映射
将一个对象的值批量映射到另一个对象中,支持自定义映射规则。对象映射可以简化代码、提高维护性,并且减少业务逻辑中的冗余操作。
传统模式
假设有两个类型:Student 和 StudentDto,现在需要将 Student 对象赋值给 StudentDto。
示例代码
csharp
var student = new Student()
{
Name = "Malus",
Age = 27,
Address = "上海市闵行区",
Gender = "男"
};
// 赋值
var studentDto = new StudentDto()
{
FullName = student.FirstName + student.LastName,
Age = student.Age,
Gender = student.Gender
};存在的问题
- 字段繁多:赋值操作耗时且容易出错。
- 代码分散:多次映射操作散落在不同地方,维护困难。
- 污染业务逻辑:赋值操作混入业务逻辑,不利于统一管理。
- 代码冗余:增加项目包大小,降低开发效率。
因此,我们需要一种更加灵活、简易的对象映射方式。
对象映射组件 - Mapster
推荐使用 Mapster,它性能优于 AutoMapper,简单易用且性能极高。
安装
shell
dotnet add package Mapster基本用法
Mapster 默认根据字段名称进行匹配,无需额外配置。配置会在第一次调用时被缓存,后续调用会从缓存中获取,从而提升性能。
csharp
// 映射为新对象
var user = new User();
var dto = user.Adapt<UserDto>();
// 在目标对象的基础上进行映射
user.Adapt(dto);
// 注意:Adapt 扩展方法使用的配置为 TypeAdapterConfig.GlobalSettings自定义映射规则
如果需要配置映射规则,可以在 TypeAdapterConfig.GlobalSettings 中进行配置。
更多配置细节,可以参考以下资源:
总结
- 传统模式:手动赋值,代码冗余且维护困难。
- Mapster:自动映射,支持自定义规则,性能优异。
通过使用 Mapster,可以显著简化对象映射操作,提高代码质量和开发效率。