从2个不同的API组合/转换2个类似的对象类型

时间:2013-11-14 19:19:53

标签: c# oop design-patterns

我是C#和OOP的初学者。我正在使用两个包含类似对象类型的第三方API,这些对象类型具有包含相同值的属性,但这两个API都具有我需要使用的唯一(和相同)功能。例如:

API1 - Point Class

公共属性

X:双重

Y:双重

公开方法

距离()

ToArray的()

API2 - Point Class

公共属性

X:双重

Y:双重

公开方法

项目()

ToArray的()

目前我已经将辅助方法从API1 Point类转换为API2 Point类,反之亦然,但必须有更好的解决方案。在这种情况下,编程专家会做什么?谢谢!

3 个答案:

答案 0 :(得分:0)

您可以使用Automapper。它使您能够定义映射

Mapper.CreateMap<Order, OrderDto>();

然后到处使用

OrderDto dto = Mapper.Map<OrderDto>(order);

答案 1 :(得分:0)

包装器类和显式转换操作可以帮助您解决问题。

public class IntergratedPoint{
    // private constructor to prevent misuse
    // If want, you can do a normal constructor which create both pointApi1 and 2
    private IntergratedPoint(){ }

    // this can be set to reference either pointApi1 or 2
    public double X{get;set;} 
    public double Y{get;set;}

    private Api1.Point pointApi1;
    private Api2.Point pointApi2;

    public static explicit operator IntegratedPoint(Api1.Point pointApi1){
        IntegratedPoint newPoint = new IntegratedPoint();
        newPoint.pointApi1 = pointApi1;
        newPoint.pointApi2 = new Api1.Point();
        // set X and Y for pointApi2
    }

    // the explicit operator for Api2.Point

    public double Distance(){
        return pointApi1.Distance();
    }
    public double Project(){
        return pointApi2.Project();
    }
    public double[] ToArray(){
        // don't know what to do, but it you can do either pointApi1.ToArray() or so
    }    
}

答案 2 :(得分:0)

我最终在API1 Point类中添加了各种扩展方法。使用类型转换辅助方法,我可以让API1点类使用API​​2点类方法。有了这个,我只在我的代码中使用API​​1点对象。