美文网首页
iOS基于MVC的项目重构总结

iOS基于MVC的项目重构总结

作者: 箫声_筱昇 | 来源:发表于2017-03-22 21:49 被阅读70次

iOS中的MVC和MVP

Cocoa版本的MVC

Cocoa版本的MVC
根据官网的描述,Cocoa中的MVC是这样的
cocoa版MVC.png
- model objects Encapulate Data and Basic Behavious
- View Objects Present Informaiton to the User
- Controller Objects Tie The Model to the View

C 和P的差别

通过搜索引擎,发现其实MVP有两种
1.Passive View
2.Supervising Controller

网上绝到多数部分谈论MVP的文章谈论的其实都是Passive View。这里放上一张Passive View的示意图

MVP的Passive View的示意图.png

简而言之.MVP就是view驱动的,View层持有对应Presenter的引用,View上的交互事件首先会调用Presenter提供的接口,人后Presenter调用Model提供的方法取得数据,最后presenter将取得的数据传递到View上展示
MVC则是由controller驱动的,controller持有的view,并相应view上的交互事件,根据交互调用不同的Model方法取得反馈数据,在将数据传递到view展示。

就我个人而言,我的理解是。MVP是用户视角,所见即View,MVC是程序员视角,:I control everyone.
理解MVC和MVP的差别困惑的地方在于。,UIViewController到底是属于C(P)层还是V层呢?下面将分别具体分析一下这两种观点

  • 观点一,uiview controller的归属-->view
    如果把UIViewController视为V层,即上面MVP示意图中的Passive View,那么UIViewController将只负责View布局相关逻辑,不涉及任何与Model层的交互!!

所有的业务逻辑交互通过UIViewController持有的Presenter与Model间的调用来完成

观点二:UIViewController的归属--->Controller

那如果把UIViewController视为C层,从MVC设计理念上来说,C层不会负责具体View的布局及展示逻辑,但是由于iOS中UIViewController的特殊设计,导致很多开发者直接就在UIViewController包含了很多具体布局相关的代码,更可怕的情况是不止是View的初始化,包括网络请求及具体业务处理也被包含到UIViewController中,这也许就是有人戏称MVC为:MassiveViewController的原因

本次基于MVC的项目重构步骤

思考要解决的问题
回到项目重构的问题上来,我认为项目重构要想清楚的问题:
1,项目层级如何划分的。
2,大的业务场景有哪些?
3,将UIView Controller归类为View还是Controller
4,谁来负责网络请求,Model还是Controller?
5,从Model中取得数据后Controller怎么把数据传递给View去展示?按照view层级主机递增?是否需要使用View Model
6.Model的生命周期怎么控制?(全局和私有Model的划分)
7,View层级结构越来越深时,怎么传递用户的交互操作?(毫无疑问是NSNotification)

UIview Controller的划分

本次重构中还是UIview Controller归类为C层,但是为了将UIview Controller彻底和UIview分离开。命名上我们直接使用XXXController。我们对每一个XXXController设计了一个对应的名为的XXXContatinerView的UIView对象。所有的view布局都会在这个XXXControllerView中完成。

屏幕截图.jpg
业务场景划分

由于之前赶进度开发,没有做具体的功能拆分.本次重构之前使用了StartUML绘制了主要场景下的UML图,包括类图,时序图,流程图
强烈推荐新项目正式编码之前就完成这一步,并由前后端技术负责人主持进行UML评审.所有涉及到的业务Model的property以及public方法,所有DataInfo类的属性,甚至所有的Controller都会在绘制UML的过程中产出.当然,要想绘制所有场景下的UML图可能耗时比较久,一般来说只要绘制出主要交互场景即可.

相关文章

  • iOS 基于 MVC 的项目重构总结

    iOS 基于 MVC 的项目重构总结 iOS 基于 MVC 的项目重构总结

  • iOS基于MVC的项目重构总结

    iOS中的MVC和MVP Cocoa版本的MVC C 和P的差别 网上绝到多数部分谈论MVP的文章谈论的其实都是P...

  • 再谈MVP模式

    为什么写这篇文章 之前在CocoaChina上投过一篇iOS基于MVC的项目重构总结。时过一年,现在回头再看,发现...

  • ionic集成极光推送

    最近公司做APP重构的项目要用到推送,技术栈基于ionic,做的Hybrid开发(公司没有android以及ios...

  • iOS Socket

    iOS Socket重构设计iOS 基于GCDAsyncSocket快速开发Socket通信 Via:宫城_

  • iOS开发见闻-第2期

    欢迎加QQ群讨论:157672725 文章 1.iOS代码实践总结 : 作者以自身在项目重构中的经历总结了许多宝...

  • iOS基于MVC模式重构项目

    项目到一段落了,终于将要完成1.X.X的最后版本即将进入2.0.1,但是看之前的项目全都是Controller(V...

  • 基于 MVC 的项目重构

    前言 最近公司的项目要更新所有界面的 UI 风格,趁此机会正好把项目重构一遍,本文主要记录重构时的一些选择和解决的...

  • iOS重构之面向协议编程实践

    最近一段时间都在进行iOS客户端的重构,参考了许多iOS重构方面的资料,在重构的过程中也遇到一些困难,同时总结了不...

  • iOS 重构之路 - 分类属性懒加载

    iOS 分类属性实现懒加载(用途:项目重构,继承->组合)

网友评论

      本文标题:iOS基于MVC的项目重构总结

      本文链接:https://www.haomeiwen.com/subject/cmcnnttx.html