2010-03-09 13 views
5

Estamos escribiendo un SDK para un programa de CAD y hemos tenido un ligero desacuerdo con respecto a un tipo específico de función (no solo desacuerdo entre diferentes personas, también desacuerdo entre mis dos mitades cerebrales)..Net SDK problema, ¿qué camino tomar?

Imagine que hay muchas clases para tipos específicos de curvas (elipse, círculo, arco, línea, bezier, etc.). Todas estas clases se pueden representar mediante una curva de Nurbs. Así que deberíamos ponemos la Circle-> función Nurbs en Círculo:

public NurbsCurve Circle.ToNurbsCurve() 
{ 
    // Return a circular NurbsCurve or null if the Circle is invalid. 
} 

o debe ser una estática en NurbsCurve:

public static NurbsCurve NurbsCurve.CreateFromCircle(Circle) 
{ 
    // Return a circular NurbsCurve or null if the Circle is invalid. 
} 
+0

Una opción serían los métodos de extensión. 'NurbsCurve ToNurbs estático público (este círculo Círculo) {}' –

+2

@Chris, eso realmente no tendría sentido aquí ... es el Círculo que sabe cómo debería convertirse en NurbsCurve, no en la clase NurbsCurve. Los métodos de extensión son una característica interesante, pero mucha gente (incluyéndome a mí) los usa en exceso –

Respuesta

4

creo que iría a por la primera (por ejemplo, en las clases de formas , tal vez incluso con una clase base común o una interfaz como IConvertibleToNurbsCurve), porque esto hace que sea más fácil si agrega otras formas más adelante que también son convertibles a NurbsCurve.

El NurbsCurve parece ser menos especializado y, por lo tanto, no debe "saber" acerca de los tipos más especializados en mi humilde opinión.

+0

Gracias Lucero. buen punto acerca de agregar más clases más tarde. –

1

yo lo pondría en la clase Circle, porque es el que sabe cómo se debe convertir a NurbsCurve. La clase NurbsCurve no debe conocer todos los tipos específicos de curva. De esta forma, si crea un nuevo tipo de curva, no tendrá que modificar la clase NurbsCurve.

Por cierto, me sugieren que declara el método ToNurbsCurve en una interfaz implementada por todas las curvas (o lo declaran virtual en una clase base abstracta)

+0

Gracias Thomas. En cuanto al comentario de la interfaz, desafortunadamente tenemos muchas funciones ToXxxx() diferentes, por lo que usar interfaces para todas ellas sería algo difícil de manejar. –

Cuestiones relacionadas