MVC-IC架构模式

这里介绍一种MVC-IC的架构设计模式。
所谓MVC就是我们常说的 Model-View-Controller的经典架构模式,而IC指的是 Information Stream + Control Stream也就是 信息流控制流

首先声明这并不是一种全新的架构模式,只是在MVC的基础上更加强调信息流和控制流。

先说一下经典的MVC模式,MVC属于一种理解型的架构模式,这种架构给出了App模块分布的指导思想,但每工程师可能有不同的理解,同一个App,都采用MVC的设计方法,不同的工程师可能就有不同的具体实现,相当灵活。
这里就大概介绍一下我对MVC的理解:

Controller:
首先说一下Controller的任务,首先Controller不应该包含任何涉及业务以及数据上的处理功能, 它只负责Model和View之间的信息交换(包括他们之间Information Stream&Control Stream的交互),Model生命周期的维护,Model之间关系的维护等。具体一点说比如,Model更新了数据,通过Information Stream返回给Controller,Controller将数据Dispatch给合适的View。
也就是说,Controller应该是Information Stream和Control Stream的Dispatch中心。另外,每个Model在何时创建,何时消亡,以及Model之间是否有什么关系,这些也需要在Controller中维护。
那么剩下的东西,我们就要放在Model和View中。

Model:
Model主要 负责业务逻辑,数据处理逻辑。业务逻辑完成我们App主要的功能,比如Camera核心的功能就是拍照,视频录制等,我们就可以把这部分封装成一个独立的Model,而数据处理逻辑则包含了数据的获取,数据的处理以及持久化等,比如Camera的数据处理逻辑主要就是对参数的设置和持久化,这部分可以封装成参数设置模块。同时业务逻辑和数据逻辑之间通常都有着相互联系。
Model应该是整个MVC架构中最复杂的部分,这部分应该可以进行更为细致的划分,但是有一个原则,那就是模块的职责单一,高内聚化。
同时我们可以有一个大致的脉络,比如业务逻辑和数据处理逻辑单独分成模块,比如Volley应该就是一种数据处理模块。我们对现实事物建立的模型,比如一个User(可能包含用户名,Email地址,电话等)的模型可以认为是一种数据。

View:
·View相对简单,主要 负责和用户的交互,信息呈现,承接用户输入。View里面可以有逻辑吗?可以,但是必须只有和UI相关的逻辑。这里我们可以这样做,抽象一个Interface,其中包含了 用户输入的响应接口,以及UI所需要的 数据的接口,以及其他对UI的 控制接口。我们构造一个UserInterfacePresenter实现这个接口,这个实现并不是真正的View,而是各种View的组合。这样Controller会将和UI相关的控制流,信息流Dispatch给Presenter,在有Presenter Dispatch给对应的View,同时,Presenter也将View产生的控制流和信息流返回给Controller,Controller再将这些流Dispatch给对应的Model进行处理。

以上说的是我个人对MVC架构模式的理解,从描述上更像是MVP架构模式:
MVP和MVC的有一定区别,从上图就可以看出来,我个人的观点是无需过于纠结他们概念上的差异,做到灵活运用实时变通最重要。

说完了MVC,下面来说说IC Stream:
MVC架构对App各个模块的分布给出了建议,这个分布是静态的,而App运行起来后是动态的,各个模块之间可能会有频繁的交互,IC Stream就是对这种交互的抽象。通过分析各个模块间的交互形式,我们发现,其实这些交互都可以归结为两种,一种是控制行为,另外一种是信息或者数据的传递。

Information Stream:
信息流:信息一般就是数据,比如网络请求接收到的数据,从数据库拿到的数据等。一个模块完成某项工作后,向其他模块提供相应的数据。信息流就是这种数据在模块间的流动过程。通常我们可以用Observer实现,同样信息流也要尽可能做到简单,清晰,不重复。 每个模块都有认真的审视自己所涉及到的信息流。

Control Stream:
控制流:控制就是命令或者请求,也包含对其他模块的方法调用,让别人为我们做一件事情,我们可以关注命令或请求的结果,也可以不关注。通常可以用Command模式来实现。我们也可以对控制做更一般的抽象:Request/Response,Request是我们发出的命令或请求,Response是对方执行后的结果(可以理解成信息流)。控制流就是指这种命令或请求在模块间的流动过程。我们要做的就是尽量使控制流简单,清晰,不重复。每个模块都有认真的审视自己所涉及到的控制流。

最后总结
MVC-IC架构其实并不是新东西,可能很多工程师在做架构设计的时候也都在这么做,这里仅仅是将IC提取出来,放到更为重要的位置上,让我们在设计架构的时候不仅仅关注模块的合理分布,更要关注构建清晰可控的控制流和信息流。这对提高我们APP的健壮性和可维护性是非常重要的。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值