转换从同一界面派生的不同对象的最佳设计模式实现

时间:2015-02-06 12:20:06

标签: c# asp.net-mvc design-patterns

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

我编写了一个单页MVC应用程序,它处理从同一个interfce派生的所有对象,并且仅在一些属性上有所不同。我的模型是所有可能属性的覆盖范围。

问题在于,当我向DAL发布数据时,我必须使用entites,而不是模型。我的Controller和View使用Model,但DAL方法需要实体A或实体B.

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

但是,是否有适当的设计模式,或者什么是最灵活,最有效的方法来完成这项任务?

问候。

1 个答案:

答案 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));