工作生活

iOS开发学习笔记:对MVC、MVVM建立认识

2019-06-29  本文已影响0人  8e750c8f0fae

本文参考:

iOS 架构模式 - 简述 MVC, MVP, MVVM 和 VIPER (译)

浅谈 MVC、MVP 和 MVVM 架构模式

在整个 GUI 编程领域,MVC 已经有将近50年的历史,并且产生了很多变种,例如 MVA、MVP、MVVM 等等。其实 MVC 并没有一个明确的定义,网上也流传着各种各样的 MVC 架构图。

MVC本身的框架思想非常的优秀,当出现问题时首先要考虑的并不是去替换掉现有的框架而是从设计的角度去优化现有的代码以及逻辑,让整个系统达到一个最优的组合。

学习iOS开发不久,就开始接触MVC这个最出名并且应用最广泛的架构模式。也开始逐渐去了解其他架构模式。

MVC、MVP、MVVM模式都是把所有的实体归类到了下面三种分类中的一种:

我们先从几种不同的MVC开始吧

ASP.NET MVC:

在微软的ASP.NET MVC Overview一文中,描述了 MVC 模式,在此引用文章的描述示意图:

image

基于此图我简单的理解为:

View展示Model中的内容;Controller管理View和Model。

Spring MVC:

与 ASP.NET 不同,Spring MVC 对于 MVC 架构模式的实现就更加复杂了,增加了一个用于分发请求、管理视图的 DispatchServlet:

image

Model、View 和 Controller 之间的关系可以理解为:

通过 DispatchServlet 将控制器层和视图层完全解耦;
视图层和模型层之间没有直接关系,只有间接关系,通过控制器对模型进行查询、返回给 DispatchServlet 后再传递至视图层;

Cocoa MVC:

理想状态的Cocoa MVC不做详细说明,实际上的Realistic Cocoa MVC其实甚至被人称为重控制器模式。虽然 View 和 View Controller 是技术上不同的组件,但它们几乎总是手牵手在一起,成对的。我们正规化它的示意图:

image

其实我实际上编写的代码,的确许多逻辑被放在了View Controller里。

如果对于你的小项目,不打算投入很多时间去设计架构,也不打算投入太多成本去维护,那么Cocoa MVC是你要选择的模式。

在开发速度上,Cocoa MVC是最好的架构模式。

而MVVM:

在典型的 MVC 应用里,许多逻辑被放在 View Controller 里。它们中的一些确实属于 View Controller,但更多的是所谓的“表示逻辑(presentation logic)”,以 MVVM 属术语来说,就是那些将 Model 数据转换为 View 可以呈现的东西的事情,例如将一个 NSDate 转换为一个格式化过的 NSString。

我们的图解里缺少某些东西,那些使我们可以把所有表示逻辑放进去的东西。我们打算将其称为 “View Model” —— 它位于 View/Controller 与 Model 之间:

image

MVVM其实就是一个 MVC 的增强版,我们正式连接了视图和控制器,并将表示逻辑从 Controller 移出放到一个新的对象里,即 View Model。MVVM 听起来很复杂,但它本质上就是一个精心优化的 MVC 架构。

其具体的使用还待实践后的补充~

结尾对几种架构的优点进行总结

一个好的架构应有的特征:

  1. 严格划分,均衡分配实体间的角色和职责
  2. 可测性强
  3. 便于使用,且维护成本低

关于这几点本人深有同感,特别是第三点,这也是前辈们教我上手提高效率的体现。再加上上文说的开发速度、不用过多时间去设计架构的优点,Cocoa MVC成为了外包公司的主要选择之一。

笔记内容略粗糙,其实和本人理解不深有很大关系,更准确,更深的内容仍需不停学习以及实践!

上一篇 下一篇

猜你喜欢

热点阅读