2010-06-14 62 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中下载它们,并让它们绘制到当前视图。

他们也能知道如何存档自己,虽然在这一点上你可能要考虑将其拔出的观点和他们的思维更是模型的一部分。