阅读更多

0顶
1踩

企业架构

转载新闻 简单聊聊Android Architecture Componets

2017-05-19 17:25 by 副主编 jihong10102006 评论(0) 有5083人浏览
Google IO大会进行中,本次大会Android最大的新闻当属Android O以及Kotlin被官方认可。我发现了原来还有发布官方的架构库,以及推荐使用指南,分享给大家。

架构原则
  • 关注分离
  • 模型驱动UI,优先持久化模型
新架构

如上图所示,为新的架构模式:

Activity/Fragment

UI层,通常是Activity/Fragment等

监听ViewModel,当VIewModel数据更新时刷新UI

监听用户事件反馈到ViewModel。

ViewModel

持有保存,或者想Repository来获取UI层需要的数据

响应UI层的事件,执行响应的操作

响应变化,并且通知到UI层

Repository

App的完全的数据模型,ViewModel交互的对象

提供简单的数据修改和获取的接口

配合好网络层数据的更新与本地持久化数据的更新,同步等

Data Source

包含本地的数据库等,网络api等

这些基本上和现有的一些MVVM,以及Clean架构的组合比较相似,不过谷歌提供了一些新的类库来帮助我们实现这个架构。

谷歌的新玩具

本地IO大会谷歌提供了新的类库来实现这个功能,小标题我写新玩具是因为这个库目前还在alpha1版本,官方只建议在个人小项目中使用。

这个类库包含如下一些东西:

Lifecycle

Android声明周期的回调,帮助我们将原先需要在onStart()等生命周期回调的代码可以分离到Activity或者Fragment之外。

LiveData

一个数据持有类,持有数据并且这个数据可以被观察被监听,和其他Observer不同的是,它和Lifecycle是绑定的。

ViewModel

用于实现架构中的ViewModel,同时是与Lifecycle绑定的,使用者无需担心生命周期。方便在多个Fragment之前分享数据,比如旋转屏幕后Activity会重新create,这时候使用ViewModel可以方便使用之前的数据,不需要再次请求网络数据。

Room

谷歌推出的一个Sqlite ORM库,不过使用起来还不错,使用注解,极大简化数据库的操作。

框架补充

工具库帮助我们进行开发,如果不满足官方的库其实可以自己实现。比如LiveData在某些情况下可使用RxJava代替。

​ 数据层官方推荐使用Room或者Realm或者其他Sqlite ORM等都可以,同时从某些方面看Room风格很像Retrofit。网络请求也被推荐使用Retrofit。

​ 各层之间的耦合推荐使用服务发现(Service Locator)或者依赖注入(DI),会上推荐了Dagger。

测试

​ 各层之间的合理分层,为测试提供极大的方便。

UI层测试

​ 使用Android Instrumentation Test,借助Espresso库进行,借助Mock的ViewModel,可以专注于测试UI

ViewModel 测试

​ 使用Mock的Repository来提供数据,使用JUnit测试,因为不涉及UI,运行速度会快很多。

Repository测试

​ 数据层Mock一些数据返回给Repository,使用JUnit测试即可

数据层测试

​ 使用JUnit测试

​ 数据库,使用Room的话官方提供了测试支持,在测试时候创建内存数据库即可。

​ 网络请求,使用MockWebServer来提供假的服务端即可。

再补一个会议时的项目结构图,以一个用户信息页面为例。

最后的话

目前这个库还不完善,api可能随时会变,公司项目不建议使用,个人项目可以尝鲜。另外对于已经有的项目,也不建议更换到现在的架构。不过这个项目的好的思想可以借鉴到我们自己的项目中来,同时这个库的方式我们其实可以借助其他的开源库来实现。
本文不再贴相关代码,具体各个库的使用请查看官方文档https://developer.android.com/topic/libraries/architecture/guide.html
附上官方的DEMO项目:https://github.com/googlesamples/android-architecture-components
  • 大小: 131.6 KB
  • 大小: 100.3 KB
来自: Sam
0
1
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • Android-Clean-Architecture:Ko使用Kotlin编写的基本示例Android应用程序,以非常简单的方式了解Clean Architecture

    Android Clean架构用Kotlin编写的一个基本示例Android应用程序,以非常简单的方式了解Clean Architecture。 只需克隆,构建,运行和理解即可。建筑学结构截屏二手图书馆:随意提交任何类型的问题和建议,以提高编码...

  • 浅谈Android Architecture Components

    浅谈Android Architecture Components浅谈Android Architecture Components 简介 Android Architecture Components Gradle 集成 LifeCycles LiveData Transformations ViewModel Room Entities Entity的参数 primary...

  • Android Architecture Components系列之LiveData&ViewModel

    上一篇咱们聊到了Android Architecture Components系列之Lifecicle,优雅解决了Activity生命周期方法的分离。不过也仅此而已,它并不是一种app架构方案,而我们今天的主角LiveData和ViewModel则是一种官方的、稳定的...

  • 我所理解的 Android Architecture Components

    我所能理解的 Android Architecture Components 写在前面: Android Architecture Components 是 Google 2017 年 I/O 大会提出的一种架构解决方案。在此之前,Android 应用大多数以 MVC MVP MVVM 等比较常见的架构...

  • Android Architecture Components学习笔记

    Android Architecture Components是谷歌在Google I/O 2017发布的。官方的描述: A new collection of libraries that help you design robust testable and maintainable apps. 全新的库集合,可帮助您设计稳健...

  • Android Jetpack Components of Lifecycle 学习笔记

    Android Jetpack Components of Lifecycle 学习笔记 Android Jetpack Components of LiveData 学习笔记 Android Jetpack Components of ViewModel 学习笔记 都说天下文章一大抄。不过我不担心,我从来不抄袭...

  • Android lifecycle 使用详解

    Architecture Components lifecycle 是 2107 年 google 大会推出来的,它属于 architecture compoment 里面的一个组件,它可以干什么用呢? 简单得来说,它可以用来检查 Activity 的生命周期,而不必强依赖 ...

  • 来聊聊 Android Jetpack

    在Android架构组件基础上,融入Kotlin 协程+retrofit,模拟网络,全面快速开发。 Navigation NavController在 NavHost 中管理应用导航的对象,沿导航图中的特定路径导航至特定目标,或直接导航至特定目标。 首先,...

  • android jetpack 简书,Android Jetpack入门

    关于JetpackJetpack是一个类库(libraries)、工具(tools)、帮助快易开发构建令人满意的Android App的指导(architectural guidance)集合,它提供了通用的基础代码(code),这样你可以专注于让你app与众不同的工作。...

  • android 必读的文章- 收藏集 - 掘金

    写给 Android 开发者的混淆使用手册 - Android - 掘金 本文转自:点击打开链接 毫无疑问,混淆是打包过程中最重要的流程之一,在没有特殊原因的情况下,所有 app 都应该开启混淆。 首先,这里说的的混淆其实是包括了...

  • Android资深开发者告诉你:简历这样写绝对吸引面试官眼球,面试电话接到手软

    拿过省大学生数学竞赛三等奖,毕业后自学 Android 开发,写了近三年博客,热爱写代码 =分割线= 英文简历 =分割线= Lisi Phone:+86 123-4567-8910 Email:lisi623@163.com Blog:https://lisi.com GitHub:...

  • 聊聊互联网巨头在新加坡的职位与薪酬

    也有朋友想了解新加坡IT现状和薪酬情况,我觉得三言两语可能无法完全讲清楚,就干脆写几篇文章来详细聊聊。 新加坡互联网发展程度比不了美国及国内,公司也没有美国和国内那么多, 没有硅谷的巨头FAANG(Facebook,...

  • 聊聊Kotlin和Jetpack的那些事儿

    活动信息主题:Android 11 Meetup: Kotlin 协程和 Jetpack Architecture Components时间:2020年7月25日 14:00 - 17:...

  • Android工程师未来发展方向以及薪资待遇

    昨天,上家公司HR问我有没有认识的Android工程师推荐一下,薪资待遇12-20k区间,聊完之后,我差点冲动去报个培训班,重新开始进入这个行业。最后,我被现实拉回了现实。不过我了解了一下Android工程师的薪资待遇以及...

  • 必读的android 文章- 收藏集 - 掘金

    写给 Android 开发者的混淆使用手册 - Android - 掘金 本文转自:点击打开链接 毫无疑问,混淆是打包过程中最重要的流程之一,在没有特殊原因的情况下,所有 app 都应该开启混淆。 首先,这里说的的混淆其实是包括...

  • 详解Gradle自动实现Android组件化

    先来看看Android组件化需要实现的目标按照业务逻辑划分模块项目模块能够单独启动测试能够根据需求引入或删除某些业务模块通过不同模块的组合,组成不同的App对于第一点:需要根据技术架构和业务架构来划分模块,这里...

  • node-v4.8.6-win-x64.zip

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

  • 基础运维技能(下)md格式笔记

    基础运维技能(下)md格式笔记

  • node-v8.1.2-linux-armv7l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics