我对Sketch示例AppKit应用程序(位于/ Developer / Examples / AppKit / Sketch中)将类定义为模型或视图感到有些困惑。 SKTRectangle,SKTCircle等类被视为Model类,但它们具有绘图代码。

我的印象是模型应该没有任何视图/绘图代码。

有人可以澄清吗?

谢谢。

最佳答案

Sketch的开发人员在自述文件中概述了他/她的基本原理:



模型-视图-控制器设计

Sketch的模型层主要是SKTGraphic类及其子类。草图文档由SKTGraphics列表组成。 SKTGraphics主要是数据承载类。每个图形都保留了代表各种图形所需的所有信息。 SKTGraphic类定义了一组用于修改图形的基本方法,并且一些子类添加了自己的新基本体。 SKTGraphic类还定义了一些用于修改图形的扩展方法,这些方法是根据基元实现的。

SKTGraphic类定义了一组允许其绘制自身的方法。尽管这可能看起来并不严格,应该成为模型的一部分,但请记住,我们建模的是视觉对象的集合。即使SKTGraphic知道如何在视图中呈现自己,也并非视图本身。



我不知道这是否对您满意。我个人对MVC的经验是,虽然模型,视图和控制器的分离是“一件好事”,但实际上在实践中,层之间的界限变得模糊了。我认为为了方便起见,经常会折衷设计。

对于我来说,尤其是对于Sketch来说,模型知道如何在视图中绘制自身对我来说很有意义。让每个SKTGraphic子类知道如何绘制自身的替代方法是让一个视图类了解每个SKTGraphic子类以及如何呈现它。在这种情况下,添加新的SKTGraphic子类将需要编辑视图类(可能在if / else或switch语句中添加新的子句)。通过当前设计,可以添加SKTGraphic子类,而无需更改视图类即可使事情正常进行。

10-08 11:28