MVC模式小结

做app的就绕不开这个,从开始的MFC,到后来的Mobile,Symbian s60,iphone,Android平台,开发文档中或多或少都会提及MVC模式,并声称自己的框架才是“真正的”遵循MVC模式。。。虽然一直在做app,但对于MVC的概念仍然不是很清晰----虽然定义都说的出来,实际编程的时候基本也是跟着感觉在走

 

最近由于项目需要,在复习iphone的app开发,里面介绍了iphone使用的MVC模式,有种豁然开朗的感觉,在这里小结一下,权当记录

 

开始还是简单解释一下MVC术语

 

M: model,模态,模型,除开程序的ui,比如标题,对话框,按钮什么的,程序的本质是什么,这个M就是什么。我的理解就是数据结构,还有算法,可能很简单,比如就一个int变量就是一个M,也可能很复杂。由于这个跟ui无关,实际跟平台也可以做到无关,平台的移植是很方便的

 

V: view,视图,就是程序的ui了,跟平台相关的,在iphone里面就是UIView,UIButton什么的了

 

C:controller,控制器。这个东西简单点就是连接M和V的东西,在设计模式中强调的解耦在这里被充分利用了

 

MVC简单点说就是通过C连接M和V的模式

 

以上这些介绍其实刚接触MVC就知道了,但具体怎么用呢?

 

下图是MVC的示意图

 

可以看到,M,V中间是双黄线,而两者跟C直接是虚线,表示M,V直接禁止互相访问,而这两者跟C在需要的时候可以访问

就像上图所示的这样,C可以直接访问M,V,而M,V禁止互相访问,上面的outlet是iphone中的概念,其他平台可以忽略掉

 

注意到,C到M,V都是单向的,能不能双向呢?我们先看C跟V,View是可以访问C的,但不是通过直接的方式

在iphone中有一种IBAction的机制,通常用在控件的消息响应上面,其他平台也有对应的机制,这里就是注意一下,相当于有了消息后发到C中,在C中做处理,好像记得s60里面可以在V中处理的,当时就纠结是在V还是在C中处理。。。

另外一个是delegate,相当于C/C++中的接口的概念,定义V的时候又定义一些接口,把实现留到运行时,这里就是在C中实现

最后一个data source,这个我持保留态度,是否应该是通过C在M中取呢?

总结上面的方式,那就是把C对V作为一个透明的存在,C知道V,而V不知道C,取消V对于C的依赖,就是说V不需要知道C就可以独立存在了,这样的话,替换V就容易,对于单个C对于多个V的情况从模型上面就得到了支持

 

下面是C和M

类似的,V也不应该直接与C通信,在iphone中使用Notification&KVO的机制,应该是类似广播的消息机制,其他平台也有对应的机制。个人觉得这里用接口来连接是不是也可以的

 

嗯,总结一下才发现自己的理解还是有限啊,以后还要多多研究

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值