2010-03-09 12 views
5

Wir schreiben ein SDK für ein CAD-Programm und sind in eine kleine Meinungsverschiedenheit über eine bestimmte Art von Funktion geraten (nicht nur Unstimmigkeiten zwischen verschiedenen Leuten, auch Meinungsverschiedenheiten zwischen meinen beiden Gehirnhälften)..Net SDK-Problem, welcher Weg zu gehen?

Stellen Sie sich vor, es gibt viele Klassen für bestimmte Kurventypen (Ellipse, Kreis, Bogen, Linie, Bezier usw.). Alle diese Klassen können durch eine Nurbs-Kurve dargestellt werden. Also sollten wir setzen die Kreis-> NURBS-Funktion auf Circle:

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

oder sollte es sich um eine statische auf NurbsCurve sein:

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

Eine Option wären Erweiterungsmethoden. 'öffentliche statische NurbsCurve ToNurbs (dieser Kreis Kreis) {}' –

+2

@Chris, das würde hier nicht wirklich Sinn machen ... es ist der Kreis, der weiß, wie es sollte Konverter zu einem NurbsCurve, nicht die NurbsCurve-Klasse. Erweiterungsmethoden sind ein cooles Feature, aber viele Leute (einschließlich mir) benutzen sie übermäßig. –

Antwort

4

ich glaube, ich zum ersten gehen würde (zB auf die Formklassen , vielleicht sogar mit einer gemeinsamen Basisklasse oder Schnittstelle wie IConvertibleToNurbsCurve), weil dies es einfacher macht, wenn Sie später andere Formen hinzufügen, die auch in eine NurbsCurve konvertierbar sind.

Die NurbsCurve scheint weniger spezialisiert zu sein und sollte daher nicht über die spezialisierteren Typen IMHO "wissen".

+0

Danke Lucero. Guter Punkt über das Hinzufügen weiterer Klassen später. –

1

ich es in der Circle Klasse setzen würde, weil er derjenige ist, dass weiß, wie es in eine NurbsCurve umgewandelt werden sollte. Die NurbsCurve Klasse sollte nicht über alle spezifischen Arten von Kurven wissen. Auf diese Weise müssen Sie die Klasse NurbsCurve nicht ändern, wenn Sie einen neuen Kurventyp erstellen.

BTW, empfehle ich Ihnen die ToNurbsCurve Methode in einer Schnittstelle von allen Kurven implementiert erklären (oder es in einer abstrakten Basisklasse virtuell deklarieren)

+0

Danke Thomas. In Bezug auf den Interface-Kommentar haben wir leider viele verschiedene ToXxxx() -Funktionen, so dass die Verwendung von Schnittstellen für alle von ihnen etwas unhandlich werden würde. –

Verwandte Themen