MVC的出现是很久很久以前的事情了,MVC本身有很多可以去说的地方,通过另一个视角去看MVC,
MVC不属于GOF设计模式,但它确实设计模式应用的集合,且拥有很多的实现方式,如:MFC的Document/View/Control,Qt的Model/View/Delegate,IOS的View/Controller/Delegate,java EE的Model/View/Control。如此多的实现让人眼都发晕。那MVC的本质是什么呢?
MVC和其他原始的设计模式一样都是为了分离变化,将不变与变化相分离,使系统更加灵活。MVC关注的对象包括:视图也就是看的见的实现的内容,模型即需要显示的数据,控制是最重要的部分它是控制视图如何渲染、模型如何管理的关键点。
MVC就体使用了那些经典设计模式呢?代理、桥接、观察者、适配器、建造者等,不同的实现具体使用到的设计模式也有所不同,但都最终实现了针对于视图和模型的相分离,并提供了统一的调用接口和绑定方法。我们从设计模式的基本原则来看一下MVC实现。
- 开闭原则,这个模型中你只能从基类扩展
- 抽象类,开发库提供了基础的接口你只需要去实现就可以
- 里氏代换,你实现的接口一定能够替换掉原来的抽象类的,不然系统就转不动了
- 依赖倒转,在原型中它只有接口而没有实现
- 接口隔离,三个接口你自己去实现,且有独立的功能
- 迪米特法则,不要直接在model中操作View,那是代理的事情
- 合成复用,你在设置model和delegate是就应该知道他们都在View或者controller中组合(不同的模型可能不同)
MVC的模型的方法不仅仅只在涉及到UI开发时能够应用,其他方面我们也能够应用到其中的方法。