.NET SDK问题,应该选择哪个方向?

5
我们正在为CAD程序编写SDK,遇到了一个关于特定类型函数的小分歧(不仅是不同人之间的分歧,也是我两个大脑半球之间的分歧)。
想象一下有很多特定曲线类型的类(椭圆、圆、弧、直线、贝塞尔等)。所有这些类都可以用Nurbs曲线表示。所以我们应该在Circle上放置Circle->Nurbs函数吗?
public NurbsCurve Circle.ToNurbsCurve()
{
  // Return a circular NurbsCurve or null if the Circle is invalid.
}

或者它应该是 NurbsCurve 上的静态内容:
public static NurbsCurve NurbsCurve.CreateFromCircle(Circle)
{
  // Return a circular NurbsCurve or null if the Circle is invalid.
}

一个选项是扩展方法。 public static NurbsCurve ToNurbs(this Circle circle) {} - Chris Farmer
2
@Chris,这里并不是很合适...应该是圆形知道如何转换为NurbsCurve,而不是NurbsCurve类。扩展方法是一个很酷的功能,但很多人(包括我)滥用它们。 - Thomas Levesque
2个回答

4

我认为我会选择第一种方法(例如在形状类上,甚至使用一个公共的基类或接口,如IConvertibleToNurbsCurve),因为这样可以更容易地添加其他可转换为NurbsCurve的形状。

NurbsCurve似乎不太专业化,因此不应该“知道”更专业化的类型。


1

我会把它放在Circle类中,因为它知道该如何转换成NurbsCurveNurbsCurve类不应该知道所有特定类型的曲线。这样,如果你创建了一个新的曲线类型,你就不需要修改NurbsCurve类。

顺便说一句,我建议你在接口中声明ToNurbsCurve方法,该接口由所有曲线实现(或者在抽象基类中声明为虚方法)。


谢谢Thomas。关于接口的评论,不幸的是我们有许多不同的ToXxxx()函数,因此对所有函数使用接口会变得有些笨重。 - David Rutten

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接