MVC梳理与总结

最开始了解MVC是在java web,现在学ios开发又要用到.虽然经常谈到,当总是感觉不是那么清晰,今天我就来总结下MVC的知识.一来可以自己梳理一遍,二来可以也当记个笔记.如果万一不小心对你有什么小小的帮助,那就更加高兴了.

####1.为什么要分模块?                                                                                                                                                                                                                                                      
评定软件质量好坏的标准有很多,其中有个方面叫'高类聚,低耦合'.我的理解就是说,将一个大的软件划分成很多小的模块.每个模块只负责一个单一简单的功能.一个模块内部要精简,高效,也就是'高类聚'.而同一层的模块之间这尽量少相互调用,如果真需要,应该提前规定好借口或协议.这样当某个功能有问题的时候,只要看相应的实现模块就行了.调试和后期的更新会方便很多,大大降低了软件开发的复杂度.操作系统就是一个很好的例子                                                                                                                                                          

####2.分块之后为什么要是MVC三大块,而不是其他的?                                                                                                                                                                                                                            
关于这个我目前也没有很好滴道理                                                                                                                                                                                                                                              

####3.MVC到底分别指什么?                                                                                                                                                                                                                                                   
M:model 模型 代表整个application,包括业务逻辑,业务数据,业务方法,拥有很高的独立性,不依赖V和C,也就是说,将M独立出来依旧可以工作                                                                                                                                                
V:view 视图 数据的呈现方式,不带逻辑.比如同样的数据,你可以用折线图,柱状图,或者饼状图来表式,仅仅改变view就行                                                                                                                                                                  
C:controller 控制器 控制整个application,对事件的处理.比如controller收到一个上滑动作,controller通知model,model根据自身的业务逻辑进行处理,将处理结果以某种形式通知controller,controller收到model的消息之后就通知view更新                                                      
比如写个小游戏2048,model中应该有2048游戏的数据,当前数字矩阵,当前分数.还有游戏的逻辑,向某个方向滑动合并的算法,判断死亡的方法,产生新的数的方法,得分规则,到2048后是否还可以继续.view负责显示,是在命令行显示,还是在iphone的屏幕上,随着数值的变大,背景颜色,字体颜色,字体大小应该怎样改变.而controller则负责协调二者,收到model的更新消息之后,更新view,是右滑操作触发model的right()方法,还是键盘上的D/->                                                                                                                                                          

####4.MVC分开之后,他们之间改如何通信?                                                                                                                                                                                                                                      
分块的目的就是限制模块间的通信(相互调用),使模块间的关系变的清晰,从而降低软件的复杂度.而如何限制就是一个很复杂的问题,限制太低,模块间的相互调用又会变的很复杂,达不到降低复杂度的目的.限制太高,使用起来很繁琐,也失去了限制的意义.下面是我基于斯坦福ios教程总结的MVC三个模块之间的通信方式:                                                                                                                                                                                                                                                                   
C->M:直接通信                                                                                                                                                                                                                                                               
C->V:直接通信                                                                                                                                                                                                                                                               
M->C:'广播',为了保持model的独立性,model应该尽量与v和c少关联                                                                                                                                                                                                                 
M->V:无法通信                                                                                                                                                                                                                                                               
V->M:无法通信                                                                                                                                                                                                                                                               
V->C:1.协议(接口)代理.定义某种接口,实现了该接口的对象(一般是controller)会注册到该view中.当某一条件达成时,view会调用注册对象中的特定方法,从而起到通知作用,view只负责接口定义和调用,接口一般由controller实现,对于view来说,接口就成了controller的代理.                         
     2.射箭模式.当某一条件达成,view将发出一个action(射箭),目标是controller.如果controller中的有与之相应的target(靶),则target将会被触发.                                                                                                                                     
注意:                                                                                                                                                                                                                                                                       
   1.model和view永远不会直接通信                                                                                                                                                                                                                                            
   2.通信对于model和view是透明的,也就是说model和view不知道自己被controller利用
posted @ 2015-11-15 21:31  ThrEcho  阅读(220)  评论(0编辑  收藏  举报