1

如果我有两个非常不同的模型,那么使用Auto MapperValue Injecter等映射框架是否违背了目的?

例如,假设我有两个结构相同的模型,但每个属性名称都不同,因此所有常规逻辑都无用。坚持手动映射这两个模型是否也一样好?

我想我主要是想了解:

1) 除了我从其按惯例映射中获得的代码节省之外,使用映射框架还有什么好处吗?

2)在映射框架中为上述场景设置映射是否比在这种情况下手动映射更容易?(看起来不像。)

4

2 回答 2

1

1) 除了我从其按惯例映射中获得的代码节省之外,使用映射框架还有什么好处吗?

我认同。这是一次性的事情之一。当然,您可以编写代码以手动 DTO 从一个对象到另一个对象,可能与创建所有自定义映射规则一样快。但是第二次需要 DTO 时,使用映射框架是有回报的。

2)在映射框架中为上述场景设置映射是否比在这种情况下手动映射更容易?(看起来不像。)

我认为大致相同:

Mapper.CreateMap<EntityModel, ViewModel()
    .ForMember(d => d.Prop1, o => o.MapFrom(s => s.Property1))
    .ForMember(d => d.Prop2, o => o.MapFrom(s => s.Property2))
    .ForMember(d => d.Prop3, o => o.MapFrom(s => s.Property3))
        ...
    .ForMember(d => d.PropN, o => o.MapFrom(s => s.PropertyN))
;

使用此映射,您的所有 DTO 代码将如下所示:

var model = Mapper.Map<ViewModel>(entityInstance);

...与...如果您手动编辑它,它对我来说看起来差不多:

var model = new ViewModel
{
    Prop1 = entityInstance.Property1,
    Prop2 = entityInstance.Property2,
    Prop3 = entityInstance.Property3,
        ...
    PropN = entityInstance.PropertyN,
};

AutoMapper 优于 ValueInjecter 的另一个很酷的事情是您只需要定义 1 个映射,然后它就可以用于映射单个实例和集合。

var models = Mapper.Map<ViewModel[]>(entityInstances);

... 相对

var models = entityInstances.Select(new ViewModel
{
    Prop1 = entityInstance.Property1,
    Prop2 = entityInstance.Property2,
    Prop3 = entityInstance.Property3,
        ...
    PropN = entityInstance.PropertyN,
});
于 2012-06-27T18:20:11.357 回答
0

例如,假设我有两个结构相同的模型,但每个属性名称都不同,

在设计视图模型 => 您可以完全控制它们(与您的域模型相反,例如,可能从数据库或设计师的某些东西自动生成)=> 您可以相应地命名它们的属性:-)

于 2012-06-27T18:19:41.213 回答