cocoa - Sketch 示例 AppKit 应用程序中的类如何分为模型/ View / Controller ?

标签 cocoa model-view-controller macos

我对 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/

相关文章:

delphi - 复杂的软件架构

language-agnostic - 使用Mac进行跨平台开发?

objective-c - 没有夏令时的日期计算

objective-c - 防止在公共(public)接口(interface)中将对象添加到 NSMutableArray

java - 创建更多对象而不是执行计算,效果如何?

填充某些属性的javascript异步调用

swift - 如何让标题栏以编程方式显示在 NSWindow 中?

objective-c - 试图从预定义的 plist 中获取整数? ObjC/ cocoa

ios - block 和消息

linux - 恢复 Snow Leopard 上文档的符号链接(symbolic link)