C# 转换来自同一接口的不同对象的最佳设计模式实现

C# 转换来自同一接口的不同对象的最佳设计模式实现,c#,asp.net-mvc,design-patterns,C#,Asp.net Mvc,Design Patterns,我有几个对象,如下面的UML图所示: 我已经编写了一个单页MVC应用程序,它处理来自同一界面的所有对象,并且只在一些属性上有所不同。我的模型覆盖了所有可能的属性 问题是,当我将数据发布到DAL时,我必须使用实体,而不是模型。我的控制器和视图使用模型,但DAL方法需要实体A或实体B 现在我想设计一个类来进行适当的覆盖。我可以创建一个具有ConvertToA()和ConvertToB()方法的类,并调用该类的方法。这是我首先想到的最基本的布局 但是,是否有一个合适的设计模式,或者什么是完成这项任务的

我有几个对象,如下面的UML图所示:

我已经编写了一个单页MVC应用程序,它处理来自同一界面的所有对象,并且只在一些属性上有所不同。我的模型覆盖了所有可能的属性

问题是,当我将数据发布到DAL时,我必须使用实体,而不是模型。我的控制器和视图使用模型,但DAL方法需要实体A或实体B

现在我想设计一个类来进行适当的覆盖。我可以创建一个具有ConvertToA()和ConvertToB()方法的类,并调用该类的方法。这是我首先想到的最基本的布局

但是,是否有一个合适的设计模式,或者什么是完成这项任务的最灵活、最有效的方法

关于。

您可以用于对象到对象的转换。在上述情况下,POST操作如下所示:

    [HttpPost]
    public ActionResult TestAction(Model model)
    {
        var entityA = _mappingService.Map<Model, EntityA>(model);
        testService.TestMethod(entityA);

        return View();
    }
[HttpPost]
公共行动结果测试行动(模型)
{
var entityA=\u mappingService.Map(模型);
testService.TestMethod(entityA);
返回视图();
}
您需要为每个模型定义如下的映射->视图模型映射(反之亦然):

Mapper.CreateMap();
CreateMap();
如果对象兼容,则支持转换。您还可以配置单个对象属性的映射,如:

    Mapper.CreateMap<Order, OrderViewModel>()
        .ForMember(o => o.OrderDescription, b => b.MapFrom(z => z.Description))
                    .ForMember(o => o.OrderId, b => b.MapFrom(z => z.Id));
Mapper.CreateMap()
.ForMember(o=>o.OrderDescription,b=>b.MapFrom(z=>z.Description))
.ForMember(o=>o.OrderId,b=>b.MapFrom(z=>z.Id));

好问题,我会先尝试使用AutoMapper。它与模型->视图模型转换很好。它是可配置的,所以您可以更改属性映射等等…您如何知道模型类的给定实例是EntityA而不是EntityB?在您的示例中,它很简单,但一般来说,它可能并不明显。例如,当实体具有相同的属性时。非常感谢。经过快速搜索,我尝试了一个类似的,在,它工作得很好。
    Mapper.CreateMap<Order, OrderViewModel>()
        .ForMember(o => o.OrderDescription, b => b.MapFrom(z => z.Description))
                    .ForMember(o => o.OrderId, b => b.MapFrom(z => z.Id));