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

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