2010-03-09 4 views
5

Nous rédigeons un SDK pour un programme de CAO et nous avons rencontré un léger désaccord concernant un type spécifique de fonction (pas seulement un désaccord entre différentes personnes, mais aussi un désaccord entre mes deux moitiés de cerveau). Imaginez qu'il y ait beaucoup de classes pour des types de courbes spécifiques (ellipse, cercle, arc, ligne, bezier etc.). Toutes ces classes peuvent être représentées par une courbe de Nurbs. Alors, devrions-nous mettre la fonction dans les zones circulaires> NURBS Circle:. Problème SDK Net, quelle voie à suivre?

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

ou doit-il être statique sur NurbsCurve:

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

Une option serait les méthodes d'extension. 'public NurbsCurve ToNurbs statique (ce cercle cercle) {}' –

+2

@Chris, cela n'aurait pas vraiment de sens ici ... c'est le cercle qui sait comment il devrait être convertisseur à un NurbsCurve, pas la classe NurbsCurve. Les méthodes d'extension sont une fonctionnalité intéressante, mais beaucoup de gens (y compris moi) abusent d'eux –

Répondre

4

Je pense que je vais pour la première (par exemple sur les classes de forme , peut-être même avec une classe de base commune ou une interface similaire à IConvertibleToNurbsCurve), car cela vous facilitera la tâche si vous ajoutez plus tard d'autres formes qui sont également convertibles en NurbsCurve. Le NurbsCurve semble être moins spécialisé et ne devrait donc pas "connaître" les types plus spécialisés IMHO.

+0

Merci Lucero. bon point sur l'ajout de plus de classes plus tard. –

1

Je le mettrais dans la classe Circle, parce qu'il est celui qui sait comment il doit être converti en NurbsCurve. La classe NurbsCurve n'est pas censée connaître tous les types de courbes spécifiques. Ainsi, si vous créez un nouveau type de courbe, vous n'aurez pas à modifier la classe NurbsCurve.

BTW, je vous suggère de déclarer la méthode ToNurbsCurve dans une interface mis en œuvre par toutes les courbes (ou l'assimiler virtuelle dans une classe de base abstraite)

+0

Merci Thomas. En ce qui concerne le commentaire d'interface, nous avons malheureusement de nombreuses fonctions différentes de ToXxxx(), donc l'utilisation d'interfaces pour chacun d'entre eux deviendrait quelque peu compliquée. –

Questions connexes