美文网首页
iOS APP架构

iOS APP架构

作者: Silence_xl | 来源:发表于2020-05-27 00:54 被阅读0次

作者:小萝卜
链接:https://zhuanlan.zhihu.com/p/37360635
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

前言

<noscript> image

</noscript>

image

<figcaption>网络系统架构</figcaption>

<noscript> image

</noscript>

image

<figcaption>IOS系统架构</figcaption>

任何系统任何程序都有自己的架构,为解决复杂的网络系统,根据不同的功能不同的复杂度设计OSI7层结构,IOS系统同样也是。

设计模式

  • MVC
<noscript> image

</noscript>

image

<figcaption>MVC元素</figcaption>

视图(View):用户界面
控制器(Controller):业务逻辑
模型(Model):数据保存

<noscript> image

</noscript>

image

<figcaption>MVC架构图</figcaption>

View 传送指令到 Controller
Controller 完成业务逻辑后,要求 Model 改变状态
Model 将新的数据发送到 View,用户得到反馈

注:所有通信都是单向的。

当然MVC在实际的应用中也有很多变种,如下:

<noscript> image

</noscript>

image

<figcaption>互动模式一</figcaption>

通过 View 接受指令,传递给 Controller。

<noscript> image

</noscript>

image

<figcaption>交互模式二</figcaption>

直接通过controller接受指令。

实际的开发过程中经常会采用更灵活的方式,如下:

<noscript> image

</noscript>

image

<figcaption>实战MVC</figcaption>

用户可以向 View 发送指令,再由 View 直接要求 Model 改变状态。
用户也可以直接向 Controller 发送指令,再由 Controller 发送给 View。
Controller 非常薄,只起到路由的作用,而 View 非常厚,业务逻辑都部署在 View。

  • MVP

MVP 模式将 Controller 改名为 Presenter,同时改变了通信方向。

<noscript> image

</noscript>

image

<figcaption>MVP架构图</figcaption>

各部分之间的通信,都是双向的。
View 与 Model 不发生联系,都通过 Presenter 传递(项目中我们经常将其设计成Manager)。
View 非常薄,不部署任何业务逻辑,称为"被动视图"(Passive View),即没有任何主动性,而 Presenter比较厚,所有的逻辑(业务逻辑和主要的UI逻辑)都部署在那里。

注:当然可以将Presenter(Manager)在做细分为业务逻辑模块和UI逻辑模块,从而进化成为MVP模式(MVVM)。

  • MVVM

MVVM 模式将 Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致。

当然有很多人会拿MVVM和MVC比较,相对于 MVC 的历史来说,MVVM 是一个相当新的架构,MVVM 最早于 2005 年被微软的 WPF 和 Silverlight 的架构师 John Gossman 提出,并且应用在微软的软件开发中。当时 MVC 已经被提出了 20 多年了,可见两者出现的年代差别有多大。详细内容请参阅:

小萝卜:MVVM 之 Unity​zhuanlan.zhihu.com

图标 <noscript> image

</noscript>

image

<figcaption>MVVM架构图</figcaption>

唯一的区别是,它采用双向绑定(Data-Binding)和 UI逻辑与业务逻辑拆分:View的变动,自动反映在 ViewModel,反之亦然。<u>Angular</u>和<u>Ember</u>都采用这种模式。

注:MVVM 在使用当中,通常还会利用双向绑定技术(DataBinding),使得 Model 变化时,ViewModel 会自动更新,而 ViewModel 变化时,View 也会自动变化。所以,MVVM 模式有些时候又被称作:Model-View-Binder 模式。如果要在IOS中实现,可以使用 KVO 或 Notification 达到这种效果。

在架构选型的过程中甚至是在开发过程中,我发现很多程序猿童鞋对于 MVVM 以及 MVVM 衍生出来的框架(例如 ReactiveCocoa)有一种「敬畏」感。这种「敬畏」感某种程度上就像对”神“一样,可能因为主要表现在我没有听到大家对于 MVVM 的任何批评,无论是游戏项目还是应用项目。
我感觉原因首先是 MVVM 并没有很大程度上普及,大家对于新技术一般都不熟,进而不敢妄加评论。另外,ReactiveCocoa 本身上手的复杂性,也让很多人感觉到这种技术很高深难懂,进而加重了大家对它的「敬畏」。

所以我觉得MVVM还是过于被大家神化了。

我们来看看MVVM的作者 John Gossman 是怎样批评MVVM的:

数据绑定使得 Bug 很难被调试。你看到界面异常了,有可能是你 View 的代码有 Bug,也可能是 Model 的代码有问题。数据绑定使得一个位置的 Bug 被快速传递到别的位置,要定位原始出问题的地方就变得不那么容易了。
对于过大的项目,数据绑定需要花费更多的内存。

某种意义上来说,我认为就是数据绑定使得 MVVM 变得复杂和难用了。但是,这个缺点同时也被很多人认为是优点。(因为在游戏开发中没有这种DataBinding技术,需要自己用观察者模式设计,用起来不是很顺手,新手理解有难度)

相关文章

  • 架构

    唯一可行的 iOS 架构 iOS App 的最佳架构,存在吗?

  • 架构之路

    1. 架构之路 (一) —— iOS原生系统架构(一)2. 架构之路 (二) —— APP架构分析(一)3. 架构...

  • 学习笔记-Android Native APP测试

    1. Android app架构 1.1 Native App 即原生APP开发模式,利用iOS、Android开...

  • iOS APP架构

    作者:小萝卜链接:https://zhuanlan.zhihu.com/p/37360635来源:知乎著作权归作者...

  • ios 架构之谈

    分类: IOS(26) 目录(?)[+] 在开始谈app架构之前,曾经我一度认为,一个好的app就是需要有好的架构...

  • 备忘tips~iOS编译

    多架构(Multi-Architecture)编译 iOS app需要在许多不同的CPU架构下运行: arm7: ...

  • iOS架构

    这里说几个概念:iOS系统框架:iOS系统架构:iOS架构:iOS 代码架构:iOS架构师:iOS架构设计: iO...

  • ios - 收藏集 - 掘金

    天弘基金移动 App 客户端架构优化之路 - iOS - 掘金天弘基金移动App客户端架构优化之路 随着移动互联网...

  • iOS项目架构

    iOS项目架构 做了几个App,发现很多时候,App的基本框架都是一样的,如何组织架构,让项目更容易开发和维护,减...

  • iOS 架构浅析

    iOS 的 App 架构是 App 项目开始开发时重要的工作之一,确定一个优秀的架构,会使开发初期的效率极大的提高...

网友评论

      本文标题:iOS APP架构

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