概述
MVC全名是Model View Controller,是模型-视图-控制器的缩写。一种软件设计典范,用一种业务逻辑、数据、界面分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
特点
一、 优点:
1、 耦合性低:视图层和业务层分离,所以在更改视图层代码时而不用重新编译模型和控制器代码。同样,更改业务流程或者业务规则改变时只需改动模型层即可。由于三个部件是相互独立,改变其中一个不会影响其他两个。
2、 重用性高 :比如很多界面可以重用一个模型。
3、 生命周期成本低。
4、 部署快。
5、 可维护性高。
6、 有利软件工程化管理。
二、 缺点:
1、 没有明确的定义:
2、 不适合小型、中等规模的应用程序。
3、 增加系统结构和实现的复杂性。
4、 视图与控制器间的过于紧密的链接。
5、 视图对模型数据的低效率访问。
6、 一般高级的界面工具或构造器不支持模式。
使用
在使用MVC设计模式时,我们得先理解和体会MVC的理念和规则:
1、 Model和View永远不能互相通信,只能通过Controller传递。
2、 Controller可以直接与Model对话(读写调用Model),Model通过Notification和KVO机制与Controller间接通信。
3、 Controller可以直接与View对话。通过Outlet,直接操作View,Outlet直接对应到View中的控件,View通过action向Controller报告事件的发生(如用户Touch我了)。Controller是View的直接数据源(数据很可能是Controller从Model中取得并经过加工了)。Controller是View的代理(delegate),以同步View与Controller。
代理的扩展:
在使用MVC设计模式时,有时候我们的View类型和一些基本的方法都一致,我们会采用集成的方法将一些共同的特性抽取出来,作为基类,其他的View只需集成即可。而很多时候,我们的代理也有许多同样的方法,这时候,我们同样使用继承的方式来实现,代理的继承和扩展和原始的代理区别如下:
1、 在定义代理时,继承基类的代理。如下图 代理SPCTableViewDataSource继承基类ZDBSimulateTableViewDatasource。
2、 定义代理实现对象。如idspcDataSoruce;
3、 在.m文件中重写set方法,给对象赋值并传值。_spcDataSoruce为当前代理的对象。而self.dataSource为父类的对象。