MVC是一个广泛的理念,更像是一种指导思想而非具体规则,并且并不总是以相同的方式实现。阅读苹果关于MVC的讨论,了解传统MVC和Cocoa中的MVC之间的区别。
很难说如何将MVC应用于您的应用程序,因为您没有告诉我们应用程序应该做什么,而且它似乎不是一个现实的应用程序。因此,我会尽力做出一些假设。一个只在固定位置的背景上绘制一堆圆圈的应用程序并不是很有趣 -- 它可能几乎全部都是视图,根本不需要控制器。所以,假设这些圆圈都在不同的方向上移动,用不同的颜色绘制,并且随着时间变化而改变大小。现在你开始需要一个模型,以便你可以跟踪这些圆圈所代表的数据,以及一个控制器来将模型转换为可以由视图表示的术语。
既然您特别问到绘制圆圈,让我们从视图开始。似乎有一个好主意是创建一个自定义视图,它知道如何根据必要的参数(区域、颜色和位置)绘制一个圆形。您可能会将这些东西作为属性,并覆盖-drawRect:,以便它可以绘制具有给定面积和给定颜色的圆。
我们不知道这些圆代表什么,但如果它们不代表任何事情,那么这并不好玩,所以让我们假设该应用程序的工作是帮助我们比较公司。我们有关于收入、市值、员工数量、信用评级、名称、股票代码等的数据。您可以创建一个自定义对象来存储每个公司的所有数据,或者您可以将其全部放在字典中。我们的模型是这些自定义对象或字典的集合。
注意,圆形视图不知道任何关于公司的信息,而模型不了解任何关于圆的信息。这是一件好事。这也是控制器发挥作用的地方。控制器是您将表达模型在视图中的代码放置的地方。它还解释视图中的事件,必要时更新模型。因此,我们的控制器既了解公司的具体情况,又了解圆形视图的属性。它为模型中的每个公司创建一个圆形视图。我希望圆的面积对应于公司的市值,垂直位置表示收入,水平位置表示雇员数量。我们将根据公司的信用评级分配颜色。当然,控制器应该跟踪所有的圆形视图,并找到一种方法来映射圆形视图和公司之间的关系。
现在你有了一个东西。它仍然是一个相当简单的应用程序,但你有了一个比较公司在几个维度上的有用图表。让我们改进它。
首先,很难知道哪个圆代表哪个公司。如果圆形视图可以选择显示一些文本就好了。让我们添加标题和副标题属性,并修改-drawRect:以分别在圆形上方和下方绘制这些字符串。我们还将更改控制器,以便在圆形上点击时,将该圆的标题和副标题设置为其公司的名称和股票代码,或者如果之前已设置,则清除它们。
其次,比较公司在某个时刻很好,但如果我们能显示随时间变化的情况会更有趣。让我们更改模型,包括收入,市值,雇员和评级的历史数据。我们可以更新控制器,以便可以使用历史数据来动画显示圆形。
第一个更改涉及如何在屏幕上绘制信息,根本不需要修改模型。第二个更改涉及我们需要处理哪些数据,根本不需要修改视图。您可以轻松地重用圆形视图来表示其他类型的数据,甚至可以用作空气曲棍球游戏中的球。它只是一个彩色圆形。您还可以在处理相同类型数据的另一个应用程序中重用模型。
我相信这个漫长的例子中假设的应用程序与你自己的应用程序几乎没有任何相似之处,但它可能有助于解释为什么MVC很有用,并指导你自己应用程序的结构。祝你好运。