2010-06-14 66 views
2

我通過艾倫·希爾加斯可可規劃爲Mac OS X工作,我做的第18章基本上挑戰,挑戰是編寫一個應用程序,可以使用鼠標繪製橢圓,然後此外,添加節約/加載和撤消支持。我試圖爲遵循MVC的這個應用程序設計一個好的類設計。這是我的想法:簡單的繪圖應用程序設計 - Hillegass Book,Ch。 18

有一個NSView子類,它代表一個橢圓形(說JBOval),我可以用它來輕鬆繪製一個橢圓形。 有一個主視圖(JBDrawingView),用於保存JBOvals並繪製它們。

事情是,我不知道如何添加歸檔。我應該存檔每個JBOval嗎?我認爲這會起作用,但歸檔NSView似乎並不高效。任何關於更好的課程設計的想法?

謝謝。

+1

難道自己不會面對這些挑戰嗎?在事實沒有達到完美之後,找出你使用的設計是好的(或壞的),因爲每個人和他的狗都事先告訴你該怎麼做?面臨的挑戰是讓你通過實踐學習! :) – 2010-06-15 02:21:54

回答

1

有一個NSView子類代表一個橢圓形(比如JBOval),我可以用它來輕鬆繪製一個橢圓。

這聽起來很MVC。 「JBOval」聽起來像是我的典範。

有一個主視圖(JBDrawingView),它包含JBOvals並繪製它們。

我喜歡這部分。

我的建議是讓每個模型對象(JBOval等)能夠創建代表它自己的Bézier路徑。 JBDrawingView(你應該想出一個更好的名字,因爲所有視圖都是按照定義繪製的)應該詢問每個模型對象的Bézier路徑,填充設置和描邊設置,並相應地繪製對象。

這保持的如何繪製知識(路徑,線寬,顏色等)在它們所屬的各種形狀的類,同時還保持在它所屬的視圖層的實際繪製代碼。

從這一點來看,歸檔代碼放置位置的答案應該是直觀明瞭的。

+0

我一直認爲形狀是數學實體。所以他們不應該知道如何畫畫。相反,我喜歡有兩個層次。一個Shapes(多邊形,矩形,正方形,圓形,橢圓形,曲線)層次結構和一個繪圖層次結構。我稱它們爲ShapePainters(PolygonPainter,OvalPainter,CurvePainter)。 – Tobias 2011-03-11 08:45:32

0

JBOval意見將各自負責繪製本身(基本上繪製一個橢圓路徑和填充它,其界限內),但JBDrawingView將負責移動鼠標並拖動(並由此尺寸和定位JBOvals,這將是其子視圖)。 drawingView將不會自行繪製。

到目前爲止存檔,您既可以有一個模型類來表示每個橢圓形(比如它的邊框,或您選擇代表每個橢圓形的任何其它尺寸)。您可以將這些模型歸檔並取消歸檔,以重新創建您的觀點。

最後,也使用JB前綴,所以......:P在你。

1

對於每個橢圓有一個完整的NSView對我來說似乎相當重量級。我會從NSObject中下載它們,並讓它們繪製到當前視圖。

他們也能知道如何存檔自己,雖然在這一點上你可能要考慮將其拔出的觀點和他們的思維更是模型的一部分。