我对 Sketch 示例 AppKit 应用程序(位于/Developer/Examples/AppKit/Sketch)中作为模型或 View 的类的定义有点困惑。 SKTRectangle、SKTCircle 等类被视为模型类,但它们具有绘图代码。
我的印象是模型应该没有任何 View /绘图代码。
有人可以澄清一下吗?
谢谢。
最佳答案
Sketch 的开发者在自述文件中概述了他/她的基本原理:
<小时/>模型- View - Controller 设计
Sketch的Model层主要是SKTGraphic类及其子类。 Sketch 文档由 SKTGraphics 列表组成。 SKTGraphics 主要是数据承载类。每个图形都保留了表示它是什么类型的图形所需的所有信息。 SKTGraphic 类定义了一组用于修改图形的基元方法,并且某些子类添加了自己的新基元。 SKTGraphic 类还定义了一些用于修改图形的扩展方法,这些方法是根据基元实现的。
SKTGraphic 类定义了一组允许其自行绘制的方法。虽然严格来说这似乎不应该是模型的一部分,但请记住,我们正在建模的是视觉对象的集合。尽管 SKTGraphic 知道如何在 View 中渲染自身,但它本身并不是 View 。
<小时/>不知道这个答案是否能让您满意。我个人对 MVC 的体验是,虽然模型、 View 和 Controller 的分离是一件“好事”,但在实践中,层与层之间的界限常常变得模糊。我认为为了方便,设计上经常会做出妥协。
特别是对于 Sketch,模型知道如何在 View 中绘制自身,这对我来说是有意义的。让每个 SKTGraphic 子类知道如何绘制自身的另一种方法是让一个 View 类了解每个 SKTGraphic 子类以及如何渲染它。在这种情况下,添加新的 SKTGraphic 子类将需要编辑 View 类(可能向 if/else 或 switch 语句添加新子句)。在当前的设计中,可以添加 SKTGraphic 子类,无需对 View 类进行任何更改即可使其正常工作。
关于cocoa - Sketch 示例 AppKit 应用程序中的类如何分为模型/ View / Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/336039/