1、什么是架构?
没有明确的定义,属于设计的一方面,没明确的把设计和架构进行区分,它可以小到类与类之间的一个交互,大到不同模块之间,以及不同业务之间的交互,都可以从架构的层面去理解它。
2、MVC架构方式
Model:模型,存数据。
View:视图,显示给用户看的界面。
Controller:控制器,可以直接与model对话,model通过kvo和notification与Controller实现间接通信,拿到model实时数据;又可以直接与view对话,通过outlet直接操作view,view又通过action向controller报告事件的发生,这样controller就可以作为中介,把model拿来的数据显示在view上。
3、MVP架构方式
Model:与MVC中的model没有太大的区别。主要提供数据的存储功能,一般都是用来封装网络获取的json数据的集合。Presenter通过调用Model进行对象交互。
View:这里的View与MVC中的V又有一些小差别,这个View可以是viewcontroller、view等控件。Presenter通过向View传model数据进行交互。
Presenter:作为model和view的中间人,从model层获取数据之后传给view,使得View和model没有耦合。
4、MVVM架构方式
MVVM跟MVC很相似,将MVC中的view和controller统一为view,并且view仍然不引用model,而且controller也不引用model,而是新增了一个模块叫viewModel,由viewModel来引用model。
上图就是MVVM的架构图,可以看到viewModel作为view和model的中间协调者。viewModel是一个非常好的地方来处理用户的输入验证逻辑,或者处理model对象中数据的格式化,并将相应的呈现逻辑告诉view,或者发起网络请求,以及其他类型的代码,但是记住一点,viewModel不能够引用view,换句话说,在viewModel中不应该导入UIKit框架进行任何UI相关的操作。一个使用MVVM非常好的方面就是方便进行测试,因为viewModel包含了所有的展示逻辑并且不引用view,所以能够非常容易进行测试,但是使用MVVM模式整体上看你增加一点代码量,但是减少了代码的复杂性,所以是值得使用MVVM模式的。
3种模式的代码demo可参考github源码。
github源码地址:https://github.com/GengbinZ/MVVM-MVP-MVC/tree/master/MVC