我有几个对象,如下面的UML图所示:
我编写了一个单页MVC应用程序,它处理从同一个interfce派生的所有对象,并且仅在一些属性上有所不同。我的模型是所有可能属性的覆盖范围。
问题在于,当我向DAL发布数据时,我必须使用entites,而不是模型。我的Controller和View使用Model,但DAL方法需要实体A或实体B.
现在我想设计一个类来进行适当的覆盖。我可以创建一个具有ConvertToA()和ConvertToB()方法的类,并调用此类的方法。这是最初想到的最基本的布局。
但是,是否有适当的设计模式,或者什么是最灵活,最有效的方法来完成这项任务?
问候。
答案 0 :(得分:2)
您可以使用AutoMapper进行对象转换。在上面提到的情况下,POST操作如下所示:
[HttpPost]
public ActionResult TestAction(Model model)
{
var entityA = _mappingService.Map<Model, EntityA>(model);
testService.TestMethod(entityA);
return View();
}
您需要为每个模型定义类似的映射 - &gt; 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));