2010-03-09 4 views
5

Stiamo scrivendo un SDK per un programma CAD e ci siamo imbattuti in un leggero disaccordo su un tipo specifico di funzione (non solo disaccordo tra persone diverse, anche disaccordo tra le mie due metà del cervello).. Problema SDK netto, quale strada da percorrere?

Immaginate che ci siano molte classi per tipi di curve specifiche (ellisse, cerchio, arco, linea, bezier ecc.). Tutte queste classi possono essere rappresentate da una curva di Nurbs. Quindi dovremmo mettere il cerchio-> funzione di NURBS su Circle:

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

o dovrebbe essere una statica sulla NurbsCurve:

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

Un'opzione sarebbe un metodo di estensione. 'Public NurbsCurve ToNurbs (questo cerchio Circle) {}' –

+2

@Chris, che non avrebbe davvero senso qui ... è il Circle che sa come dovrebbe essere convertito in una NurbsCurve, non nella classe NurbsCurve. I metodi di estensione sono una funzione interessante, ma molte persone (incluso me) li usano eccessivamente. –

risposta

4

Credo che mi piacerebbe andare per la prima (ad esempio, sulle classi di forma , forse anche con una classe base comune o un'interfaccia come IConvertibleToNurbsCurve), perché questo rende più facile se aggiungi altre forme in seguito che sono anche convertibili in un NurbsCurve.

Il NurbsCurve sembra essere meno specializzato e quindi non dovrebbe "conoscere" i tipi più specializzati IMHO.

+0

Grazie Lucero. buon punto sull'aggiunta di più classi in seguito. –

1

lo metterei nella classe Circle, perché è quello che sa come dovrebbe essere convertito in un NurbsCurve. La classe NurbsCurve non dovrebbe conoscere tutti i tipi specifici di curva. In questo modo, se si crea un nuovo tipo di curva, non sarà necessario modificare la classe NurbsCurve.

BTW, vi suggerisco di dichiarare il metodo ToNurbsCurve in un'interfaccia implementata da tutte le curve (o dichiarare che virtuale in una classe base astratta)

+0

Grazie Thomas. Per quanto riguarda il commento sull'interfaccia, sfortunatamente abbiamo molte diverse funzioni di ToXxxx(), quindi l'uso di interfacce per tutti loro sarebbe un po 'ingombrante. –