2010-03-09 19 views
5

Chúng tôi đang viết một SDK cho một chương trình CAD và đã gặp một chút bất đồng về một loại chức năng cụ thể (không chỉ bất đồng giữa những người khác nhau, cũng không đồng ý giữa hai nửa não của tôi)..Net SDK vấn đề, có cách nào để đi?

Hãy tưởng tượng có rất nhiều lớp học cho các loại đường cong cụ thể (hình elip, hình tròn, cung, đường, bezier, v.v ...). Tất cả các lớp này có thể được biểu diễn bằng đường cong Nurbs. Vì vậy, chúng ta nên đặt Circle> function NURBS trên Circle:

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

hoặc nó phải là một tĩnh trên NurbsCurve:

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

Một tùy chọn sẽ là các phương pháp mở rộng. 'public static NurbsCurve ToNurbs (vòng tròn Circle này) {}' –

+2

@ Chris, điều đó sẽ không thực sự có ý nghĩa ở đây ... nó là Circle biết làm thế nào nó nên được chuyển đổi thành một NurbsCurve, không phải là lớp NurbsCurve. Phương pháp mở rộng là một tính năng thú vị, nhưng nhiều người (bao gồm cả tôi) lạm dụng chúng –

Trả lời

4

Tôi nghĩ rằng tôi muốn đi cho người đầu tiên (ví dụ như trên các lớp hình dạng , thậm chí có thể với một lớp cơ sở chung hoặc giao diện như IConvertibleToNurbsCurve), bởi vì điều này làm cho nó dễ dàng hơn nếu bạn thêm các hình dạng khác sau đó cũng có thể chuyển đổi thành NurbsCurve.

NurbsCurve dường như ít chuyên biệt hơn và do đó không nên "biết" về IMHO loại chuyên biệt hơn.

+0

Cảm ơn Lucero. điểm tốt về việc bổ sung thêm các lớp sau này. –

1

tôi sẽ đặt nó trong lớp Circle, bởi vì nó là một mà biết cách chuyển đổi thành NurbsCurve. Lớp NurbsCurve không được biết về tất cả các loại đường cong cụ thể. Bằng cách đó, nếu bạn tạo một loại đường cong mới, bạn sẽ không phải sửa đổi lớp NurbsCurve.

BTW, tôi đề nghị bạn khai báo các phương pháp ToNurbsCurve trong một giao diện được thực hiện bởi tất cả các đường cong (hoặc khai báo nó ảo trong lớp cơ sở trừu tượng)

+0

Cảm ơn Thomas. Về nhận xét Giao diện, chúng tôi không may có nhiều hàm ToXxxx() khác nhau nên việc sử dụng giao diện cho tất cả chúng sẽ trở nên hơi khó sử dụng. –

Các vấn đề liên quan