MVC -设计模式之王

Model View Controller Cocoa的基石之一,且毫无疑问的是所有设计模式中最常用的设计模式,它根据你的应用中的一般角色去分类对象,鼓励在完全分离的模式下分角色。

           Model:这个对象hold住你的应用数据,且定义如何去操作它,例如本例中就是Album类。

           View:这个对象掌管了Model的可视化显示,和控制用户的交互,基本上所有的都是UIView和它的子类。在本例中这个就是被分离成的AlbumView类。

           Controller:控制器是调节所有工作的调节器,它访问模型中的数据,然后用视图去显示它,根据要求监听事件和操作数据。你能想象在这个哪个是Controller么,就是ViewController.

视图和模型通过控制器去交流的场景可以被描述成以下图:

MVC -设计模式之王_MVC

如果在Model中有任何数据变化,那么它就会通知Controller,反过来,Controller更新在View中的数据,View可以通知Controller关于用户的行为,然后Controller要么根据需要或者检索要求的数据去更新Model

你也许会怀疑为什么不只是创建了Controller然后将ViewModel一起放到里面去实现?那样看起来不是更容易么?

这所有的所有都是为了是代码分离化和提高可重用性。理想情况下,视图应该会从Model中完全分离出来,如果视图不依赖于某个具体的Model的实现部分,那么它可以用不同的Model去展示其他一些数据来实现它的可重用性。

例如:如果将来你想添加一些电影和书籍到你的库中去,你仍然可以使用相同的AlbumView去展示你的电影和书籍的对象,更进一步说,如果你想去创建一个工程去处理专辑,你可以很简单的去重用你的Album类,因为它不依赖于任何一个视图。这就是MVC的魔力。

如何实现MVC模式

首先,你需要确保你的工程中的每一个类都是Controller,或者View,或者Model,不要讲任何两个中的角色的任务连接在一块,通过创建Album和AlbumV类你已经做了一个很好的工作。

其次,为了确保遵守这个工作方法,你应该创建三个工程组去hold住你的代码,每类一个分组。

按住Command+option+N键,创建一个组,名为Model,同样创建View和Controller,将Album.h和Album.m拖入Model中,拖动AlbumView.hAlbumView.m的视图组,最后拖ViewController.hViewController.m到控制器组.

这时候你的工程结构应该看起来是这样的:

MVC -设计模式之王_MVC_02

现在看起来没有那些文件浮在四周,看着好多了。显然你可以有其他的组和类,但是这个应用中的核心就是包含在这三个类中的。

既然你的组成部分已经被组织起来了,你需要从别的地方去获得album的数据,你将会创建一个API类去在全部的代码中去管理这些数据-这将会在你的下一个设计模式-单例中得到展示。