设计开发 1数字技术 叶 实现对Presenter的测试。在MVC模式中测试和维护较难解 决的问题,在MVP中都解决了。 J lP 23MVVM Android应用中的MVVM是在20 1 5年Google的IO大会 上推出的。提到M V V M,大多数开发者都会想D a t a 繁 Binding,Data Binding是Google官方推出的一个基于 晓 一 ~龇 麟 羝 构 MVVM设计模式实现的框架,MVVM可以实现视图和逻辑 腰~逝一 ~耀 ~件 缴 一统 代码的超级解耦,按照G00gle的说法,使用了MVVM的开 发模式,还可以提高布局文件的解析速度。从图3中可以看 到,MVVM和MVP的结构上区别不大,Presenter层换成了 图4 APP整体架构 ViewModel层,View层和ViewModel层是相互绑定的关系, 这意味着当更新ViewModel层的数据的时候,View层的UI 会相应的变动。 鹾 ; 在MVVM设计模式中,通过ViewModel和View的映 射,完成了View和Model的双向绑定。View的事件直接传 务 {碰埘塌 递 ̄1]ViewModel,ViewModel去ReModel进行操作并接受更 新。进而反馈到View上。相比于MVP去掉了Presenter,但 敞 : VieW层略显过重,同时View的复用成为了一个新的问题。 i . 一 2.4分析比较 图5应用层架构 经过上面的分析,可见MVC已不太适用Android等移 i tY控制器并不是完全分离的,也就是说一部分View视图 动应用的开发设计中了,相比来说MVP和MVVM是更适合 和Controller控制器Activity是绑定在一个类中的。 在移动应用的开发中使用,MVP和MVVM这两个MVC的 MVC在Web开发中使用极为广‘泛,但使用在Android 升级延续孰优孰劣,并没有结论,还是要根据具体的项目、 中,问题还是较多的,Xml布局文件作为视图层,控制能力 具体产品来分析。 较弱,如果动态的去改变界面,只能把代码写在A CtivitY 3整体架构的设计与实现 中,这就造成了Activity既是Controller层,又是View层的 优秀的A P P架构应该具有清晰的层次划分,功能模块 这样一个窘境。MV C还有一个重要的缺陷,图l可以看到, View层和M0del层是相互可知的,这意味着两层之间存在 划分和业务逻辑划分,同一层模块间充分解耦,模块内部 耦合,虽然控制器起到了一定的解耦作用,但也只是在一 高内聚,各分层设计符合面向对象设计六大原则,提高程 定程度上,耦合对于一个大型程序来说是非常致命的,因 序的封装性、复用性、可维护性,最后应该在功能,性能,稳 定性等方面达到综合最优。基于此,APP架构可分为四层, 为这表示开发,测试,维护都需要花大量的精力。 如图4所示,最顶层是应用层,是面向用户的第一层,然后 2.2MVP MVP是模型(Mode1)、视图(View)、主持人(Presenter)的 是应用组件层,提供了封装组件服务,再下是基础组件层,缩写,分别代表项目中3个不同的模块。MVP作为MV C的 为APP提供基础功能组件,最下面是系统层,直接面向系 演化,更适用在移动应用的开发中,解决了M V C存在的缺 统底层开发。整 体 一. .、 3.1应用层 点,对于Android来说,MVP的Model层相对于MV C是一样 应用层专注于业务领域的实现,与需求的业务功能关 的,而Activity和Fragment不再是Controller层,而是纯粹的 View层,所有关于用户事件的转发全部交由Presenter层处 联,直接面向用户,是用户对产品感知的第一层,应用层包 含以下细分的三层,如图5所示。 理。 (1)视图层,与用户直接交互的界面,是用户和系统之 图2是MVP的设计模式图,从图中可以看出,与MVC最 明显的差别就是View层和M0del层是不连通的,做到了完 间交流的桥梁,它一方面为用户提供了交互的工具,另一 全的解耦,当V i e w层某个界面需要展示某些数据的时候, 方面也为显示和数据处理实现了一定的逻辑,协调用户和 首先会调用Presenter层的接口,然后Presenter层会调用 系统的操作。(2)业务层,包含了APP需要的所有功能上的 M0del层请求数据,当M0del层数据加载成功之后会调用 算法和逻辑处理,并与数据层和视图层交互。抽象的说,业 Presenter层的回调方法通知Presenter层数据加载完毕,最 务层是处理与业务相关的部分,包含一系列的执行与数据 后Presenter层再调用View层的接口将加载后的数据展示 的操作。(3)数据层,提供访问数据的功能,在分层设计中,所有读取数据或写入数据的工作都属于这一层的任务,不 给用户。这就是M V P模式的整个核心过程。 在整个过程中,Presenter层充当了桥梁的作用,View 做过多的数据逻辑处理,操作的是非原始数据。层和M0del层完全没有联系。在层与层的通信交互中,主要 是通过接口和回调机制实现的。这样分层的好处就是大大 减少了M0del与View层之间的耦合度。一方面可以使得 View层和M0del层单独开发与测试,互不依赖。另一方面 M 0 de 1层可以封装复用,可以极大的减少代码量。不仅如 此,还可以编写测试用的View,模拟用户的各种操作,从而 3-2应用组件层 应用组件层为上层封装业务功能,以服务的表现形式 提供,不涉及U I和平台的特性,应用组件层的服务是 的,可移植的,不依赖特定的开发和使用环境,如图6所示, 主要包括有社交分享、推送服务、扫码组件、键盘组件、手 势密码等。 134 设计开发 从Model出发,而没有考虑fUView端的复杂性,这样导致的 问题是Model难以符合复杂多变的View端变化。相对这点, MVP和MVVM就要好得多。它们都出了Presenter和 ViewModel来对应每个View。MVP模式是一个真正意义卜 的隔离View的细节和复杂性的模式,在MVP模式中的V代 表的是一个接口,一个将U I界面提炼而抽象出来的接口。 接口意味着任何实现了该接口的界面,都能够复用已有的 Presenter和Model代码。在MVVM模式中,一个ViewModel 和一个View匹配,它没有MVP中的IView接口,而是完全的 和View绑定,所有View中的修改变化,都会自动更新到 ViewModel中,同HCviewModel的任何变化也会自动同步 到View上显示。MVP与MVVM两者没有严格的好坏之分, 在具体选择实现时,还是要要具体分析AP P的需求复杂度 和具体的业务场景。 4.2应用组件层 图6应用组件层架构 日志记录 { f 豳片缓存 数据解析 图7基础组件层架构 系统层 消息处 应用组件层为上层封装业务功能,以服务的表现形式 提供,社交分享、推送服务等,它们的实现最简单的方式就 是使用第三方平台,具体的整合,第三方平台都已经提供 了很完善的API接口文档。同时补充一点,事件总线也分布 在此层,在And r0id系统中,事件总线简化了A CtivitY、 Fragment、Service等组件之间的交互,很大程度上降低了它 们之间的耦合,使得我们的代码更加简洁,耦合性更低,提 升我们的代码质量。 4-3基础组件层 基础组件层提供A P P的公有特性,数据库操作足应尽 量使用ORM框架,ORM是一种程序设计技术,用于实现面 向对象编程语言里不同类型系统的数据之间的转换。现在 较为成熟的是ORMLite与GreenDao。网络、图片、JSON等的 图8系统层架构 处理,依靠成熟的框架是较为明智的选择。日志记录是一 3-3基础组件层 个基础且极为重要的组件,可帮助开发人员代码凋试,快 基础组件是相对于业务功能来说的,它是对复用率比 速错误定位,Android系统中提供了Log类来记录日志,使 较高的代码的一种抽离,它提供A PP的公有特性,实现依 用起来方便简单,也可以使用功能更为强大的开源日志记 赖特定的平台环境,这一层也是用户对产品的一种感知, 录库LOgge r,具体的选择依赖于开发者的使用习惯。 这种感知表现在稳定性、性能等方面,直接关系到产品的 4.4系统层 用户体验。如图7所示主要包括有数据库操作、网络通信处 系统层的开发更偏向于Linux环境开发,Android系统 理、日志记录、图片缓存、数据解析(JsON/XML)、加解密 是以Ltnux内核为基础,所以对于进程的管理自然离不开 等。 Linux本身提供的机制。在Android系统中,进程可以大致分 3.4系统层 系统层主要是基于底层的一些系统模块,如图8所示, 主要包括进程通信、线程管理、内存管理、消息处理等,在 Android APP的开发中,进程和内存的管理是较难处理的, Android采取了一种有别于Linux的进程管理策略,在进程 活动停止后并不立刻结束该进程,Android把这些进程都 保留在内存中,直到系统需要更多内存为止。这些保留在 内存中的进程通常情况下不会影响整体系统的运行速度, 并且当用户再次激活这些进程时,提升了进程的启动速 度,Android其实已经为开发者做好了很多事情,系统层的 开发应多参考源码标准。 为系统进程和应用进程两大类,开发者更多关注的是应用 进程,Android应用程序是通过消息来驱动的,系统为每‘ 个应用程序维护一个消息队列,应用程序的主线程不断地 从这个消息队列中获取消息,然后对这些消息进行处理, 这样就实现了通过消息来驱动应用程序的执行。系统层的 开发实现,Android提供了较为丰富的实现方式,包括上层 Java的封装实现,和下层c/C++的底层实现。本文不再详 细介绍。 5结语 本文通过一系列的分层与整合,剥离和组合等方式优 化了APP应用的整体架构,在关键技术实现上,本文也给 4关键技术实现 出了一定的技术指导。在应用的设计开发中使用分层架构 4.1应用层 模式,一方面能提高APP的功能性、稳定性和可维护性,另 应用层作为与用户交互的第一层,直接影响着用户的 方面提高了用户的产品使用体验,这样才能促使APP产 交互体验,因此采用成熟的设计框架更为稳妥,本文分析 品长期发展下去。 了Android中常用的UI设计架构模式,MVC的设计思想是 一” 135