【问题标题】:.Net SDK problem, which way to go?.Net SDK问题,该走哪条路?
【发布时间】:2011-01-25 16:16:06
【问题描述】:

我们正在为 CAD 程序编写 SDK,但在特定类型的功能上遇到了轻微的分歧(不仅仅是不同人之间的分歧,还有我的两个大脑半部之间的分歧)。

想象一下,针对特定曲线类型(椭圆、圆、圆弧、直线、贝塞尔曲线等)有很多类。所有这些类都可以用 Nurbs 曲线表示。那么我们是否应该将 Circle->Nurbs 函数放在 Circle 上:

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,这在这里没有任何意义......知道它应该如何转换为 NurbsCurve 的是 Circle,而不是 NurbsCurve 类。扩展方法是一个很酷的功能,但很多人(包括我)过度使用它们

标签: c# .net sdk


【解决方案1】:

我会将它放在Circle 类中,因为它知道如何将其转换为NurbsCurveNurbsCurve 类不应该知道所有特定类型的曲线。这样,如果您创建一种新类型的曲线,您就不必修改 NurbsCurve 类。

顺便说一句,我建议你在所有曲线实现的接口中声明ToNurbsCurve方法(或在抽象基类中声明它是虚拟的)

【讨论】:

  • 谢谢托马斯。关于接口注释,不幸的是,我们有许多不同的 ToXxxx() 函数,因此为所有这些函数使用接口会变得有些笨拙。
【解决方案2】:

我想我会选择第一个(例如,在形状类上,甚至可能使用公共基类或接口,如IConvertibleToNurbsCurve),因为如果您稍后添加其他形状也可以更轻松地转换为NurbsCurve

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多