4

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

API1 - 点类

公共财产

X : 双

Y : 双

公共方法

距离()

数组()

API2 - 点类

公共财产

X : 双

Y : 双

公共方法

项目()

数组()

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

4

3 回答 3

0

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

Mapper.CreateMap<Order, OrderDto>();

然后随处使用它

OrderDto dto = Mapper.Map<OrderDto>(order);
于 2013-11-14T19:23:51.293 回答
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
    }    
}
于 2013-11-15T10:55:02.230 回答
0

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

于 2014-01-14T15:44:27.620 回答