转换从同一接口派生的不同对象的最佳设计模式实现
Best Design Pattern implementation to convert different objects derived from the same interface
我有几个对象,如下面的 UML 图所示:
我编写了一个单页 MVC 应用程序,它处理从同一接口派生的所有对象,仅在几个属性上有所不同。我的模型是覆盖所有可能的属性。
问题是,当我 post 数据到 DAL 时,我必须使用实体,而不是模型。我的控制器和视图使用模型,但 DAL 方法需要实体 A 或实体 B。
现在我想设计一个class来做适当的覆盖。我可以制作一个 class 具有方法 ConvertToA() 和 ConvertToB() 并调用此 class 的方法。这是第一个想到的最基本的布局。
但是是否有合适的设计模式,或者什么是完成此任务的最灵活、最有效的方法?
此致。
您可以使用 AutoMapper 进行对象到对象的转换。在上述情况下,POST 操作如下所示:
[HttpPost]
public ActionResult TestAction(Model model)
{
var entityA = _mappingService.Map<Model, EntityA>(model);
testService.TestMethod(entityA);
return View();
}
您需要为每个 Model -> ViewModel 映射(反之亦然)定义这样的映射:
Mapper.CreateMap<EntityA, Model>();
Mapper.CreateMap<Model, EntityA>();
如果对象兼容,则支持转换。您还可以配置单个对象属性的映射,例如:
Mapper.CreateMap<Order, OrderViewModel>()
.ForMember(o => o.OrderDescription, b => b.MapFrom(z => z.Description))
.ForMember(o => o.OrderId, b => b.MapFrom(z => z.Id));
我有几个对象,如下面的 UML 图所示:
我编写了一个单页 MVC 应用程序,它处理从同一接口派生的所有对象,仅在几个属性上有所不同。我的模型是覆盖所有可能的属性。
问题是,当我 post 数据到 DAL 时,我必须使用实体,而不是模型。我的控制器和视图使用模型,但 DAL 方法需要实体 A 或实体 B。
现在我想设计一个class来做适当的覆盖。我可以制作一个 class 具有方法 ConvertToA() 和 ConvertToB() 并调用此 class 的方法。这是第一个想到的最基本的布局。
但是是否有合适的设计模式,或者什么是完成此任务的最灵活、最有效的方法?
此致。
您可以使用 AutoMapper 进行对象到对象的转换。在上述情况下,POST 操作如下所示:
[HttpPost]
public ActionResult TestAction(Model model)
{
var entityA = _mappingService.Map<Model, EntityA>(model);
testService.TestMethod(entityA);
return View();
}
您需要为每个 Model -> ViewModel 映射(反之亦然)定义这样的映射:
Mapper.CreateMap<EntityA, Model>();
Mapper.CreateMap<Model, EntityA>();
如果对象兼容,则支持转换。您还可以配置单个对象属性的映射,例如:
Mapper.CreateMap<Order, OrderViewModel>()
.ForMember(o => o.OrderDescription, b => b.MapFrom(z => z.Description))
.ForMember(o => o.OrderId, b => b.MapFrom(z => z.Id));