AI 助理
备案 控制台
开发者社区 开发与运维 文章 正文

App 组件化/模块化之路——构建开发架构思路

简介:

App 组件化/模块化开发架构思路

随着业务的发展 App 开发技术也越来越成熟,对开发者来说 App 代码量也迅速地增长到一个数量级。对于如何架构 App 已经每个开发者面临的实际问题。好的架构可以提高开发者的效率,降低维护成本。

由于业务增长引起项目中代码量激增,以及历史遗留问题和结构混乱,作为一个有代码洁癖的程序员,很早就开始思考如何组织 App 架构的问题了。目前遇到的主要有以下几点问题:

  1. 代码量激增引起结构混乱
  2. 各个模块相互引用且耦合度高
  3. 无法独立开发或者调试组件代码
  4. 无法应对组件插拔的需求(例如:产品经理今天把这个功能加上,第二天又去掉,第三天又加回来T_T)

App 架构图

在阅读了大量的文档之后,根据实际项目开发遇到的问题,我总结了以下架构。由于水平有限,有不合理的欢迎拍砖

App架构图

自下而上将 App 分为:

  • 内核层
  • 业务层
  • 应用层

内核层

内核层是包含了为 App 提供公共服务的的一些库。例如:公共资源、网络库、日志工具、数据库、图片加载等核心库。这些是整个 App 基础库。

业务层

我认为这一层是整个 App 架构的关键。因为根据实际业务需求,这一层会分离出许多独立组件(其实就是对应于 Android Studio 的 Module),但这些组件可以独立运行,相当于一个小应用(组件如何独立运行将在应用层中会详细解析)。并且这些组件不再像传统的方式进行相互引用,而是采用了组件路由进行各个组件的通信。

比如组件 A 中需要跳转到组件 B 中的一个 Activity 页面,传统的做法是在 ModuleAActivity 中

Intent intent = new Intent(this,ModuleBActivity.class);
intent.putExtra("data", data);
startActivity(intent);

这样 Module A 与 Module B 耦合度就很强

比较好的做法应该是

Intent intent = Router.route(context,"BPackageName.ModuleBActivity",data);
startActivity(intent);

当然实现上面的路由原理也有很多方式,例如可以使用 Android 系统的隐式调用实现跳转通信。

在 Manifest 文件中

复制代码
<activity android:name=".ModuleBActivity">
<intent-filter>
<data
android:host="moduleb"
android:path="/entry"
android:scheme="router"/>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
</activity>
复制代码

实际调用

复制代码
String url = "router://moduleb/entry";
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);
if (!activities.isEmpty()) {
startActivity(intent);
}
复制代码

Router 层目前有一个比较好的开源框架可以参考,来自 alibaba 的开源项目:ARouter

SDK 编码思维

业务层要实现比较好组件分离,对程序猿现在编码思维要转换一下,要切换到 SDK 思维。

那什么是 SDK 思维呢?

想想项目中引用他人编写的库的接口使用方式,就不难理解了。即站在使用者的角度上思考:如何使用接口才是最方便的?例如公司现有好几个 App 产品,每个 App 都需要使用同样的授权登录。那么这个授权登录模块就可以独立成一个组件。

假设将授权登录组件命名为auth。那么其它组件在使用的时候可能类似以下代码片段

AuthApi.authorize(context,userId,password).onAuthorizeFinished(
authInfo->doAuthorizeWorks(authInfo)//处理登录后的逻辑,把授权码保存用于请求其他业务接口,例如请求用户信息等
);

所以,作者觉得接口设计或者提供应该是利他主义的。当然这纯粹是作者的一家之言,欢迎继续拍砖。

应用层

顾名思义,这一层是对整个 App 的整合,也是 App 的入口。这里有 Main 和 Dev。其中 Main 是对各个业务组件的整合,是最终打包的产品的上层应用。而组件入口是独立运行和调试各个组件的子应用。

Dev 在 Android Studio 中是对应一个 Application 。在 gradle 中配置为

apply plugin: 'com.android.application'

它是一个可以独立运行的子工程,要调试 Module A 那么在 Dev 中将引用该组件

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(':moduleA')
...
}

这就是一个大概的思路,可以看出这个框架关键的部分是在于业务层的分离。需要把原来项目中的基础模块抽取出来,放在内核层中。那么下一步就开始构建我们的内核层组件。





作者:AngryCode
来源:51CTO
玄学酱
目录
相关文章
请看我回答~
|
2天前
|
运维 监控 持续交付
后端开发中的微服务架构:优势与挑战
【8月更文挑战第20天】随着云计算和容器化技术的发展,微服务架构已经成为现代软件开发中的一种流行趋势。本文将探讨微服务架构的核心优势以及在实施过程中可能遇到的技术和组织挑战。我们将从微服务的定义入手,进而深入分析其设计哲学、技术特性以及在实际应用中的效益与问题。
请看我回答~
139 56
不吃核桃
|
1天前
|
移动开发 前端开发 weex
Android项目架构设计问题之模块化后调用式通信如何解决
Android项目架构设计问题之模块化后调用式通信如何解决
不吃核桃
7 0
叫个什么名字
|
1天前
|
存储 运维 Cloud Native
后端开发中的微服务架构实践
在这个数字化快速发展的时代,后端技术不断演进以支撑日益增长的互联网服务需求。微服务架构作为现代软件工程的一种重要范式,以其灵活性、可维护性和可扩展性受到企业的青睐。本文将深入探讨微服务的核心概念、设计原则以及在实际应用中面临的挑战和解决策略,旨在为后端开发人员提供一套清晰的微服务架构实践指南。
叫个什么名字
12 0
游客qf4jmczx4xu2y
|
2天前
|
运维 负载均衡 API
探索后端开发中的微服务架构
【8月更文挑战第20天】在数字化时代的浪潮中,后端开发不断进化以适应复杂多变的业务需求。微服务架构作为一种新兴的软件开发方法,其核心在于将一个大型复杂的应用程序分解为一组小型、独立的服务。本文将深入探讨微服务架构的设计原则、优势与挑战,并分析其在现代后端开发中的应用实例,旨在为读者提供一种全新的视角来理解微服务架构的价值与影响。
游客qf4jmczx4xu2y
13 0
aliyun8599273441-30642
|
2天前
|
监控 负载均衡 数据管理
后端开发中的微服务架构实践与挑战
【8月更文挑战第20天】在现代软件工程领域,微服务架构因其灵活性和可扩展性而受到推崇。本文将深入探讨微服务架构的核心概念、实施过程中的关键步骤以及面临的主要挑战,旨在为后端开发人员提供一个全面的视角,帮助他们理解和应对微服务架构带来的变革。
aliyun8599273441-30642
12 0
游客qf4jmczx4xu2y
|
3天前
|
Kubernetes 数据库 开发者
后端开发中的微服务架构实践
【8月更文挑战第19天】本文将深入探讨微服务架构在后端开发中的应用,包括其设计原则、挑战与解决方案。文章旨在为读者提供一种现代后端开发的新视角,帮助开发者更好地理解并应用微服务架构以提升系统的可维护性、可扩展性和敏捷性。
游客qf4jmczx4xu2y
6 0
程序员小鱼
|
机器学习/深度学习 Java API
Gradle更小、更快构建APP的奇淫技巧
Gradle更小、更快构建APP的奇淫技巧
程序员小鱼
1406 0
aqi00
|
5天前
|
Web App开发 Android开发
FFmpeg开发笔记(四十六)利用SRT协议构建手机APP的直播Demo
实时数据传输在互联网中至关重要,不仅支持即时通讯如QQ、微信的文字与图片传输,还包括音视频通信。一对一通信常采用WebRTC技术,如《Android Studio开发实战》中的App集成示例;而一对多的在线直播则需部署独立的流媒体服务器,使用如SRT等协议。SRT因其优越的直播质量正逐渐成为主流。本文档概述了SRT协议的使用,包括通过OBS Studio和SRT Streamer进行SRT直播推流的方法,并展示了推流与拉流的成功实例。更多细节参见《FFmpeg开发实战》一书。
aqi00
22 1
FFmpeg开发笔记(四十六)利用SRT协议构建手机APP的直播Demo
aqi00
|
12天前
|
Web App开发 5G Linux
FFmpeg开发笔记(四十四)毕业设计可做的几个拉满颜值的音视频APP
一年一度的毕业季来临,计算机专业的毕业设计尤为重要,不仅关乎学业评价还积累实战经验。选择紧跟5G技术趋势的音视频APP作为课题极具吸引力。这里推荐三类应用:一是融合WebRTC技术实现视频通话的即时通信APP;二是具备在线直播功能的短视频分享平台,涉及RTMP/SRT等直播技术;三是具有自定义动画特效及卡拉OK歌词字幕功能的视频剪辑工具。这些项目不仅技术含量高,也符合市场需求,是毕业设计的理想选择。
aqi00
38 6
FFmpeg开发笔记(四十四)毕业设计可做的几个拉满颜值的音视频APP
aqi00
|
11天前
|
编解码 Java Android开发
FFmpeg开发笔记(四十五)使用SRT Streamer开启APP直播推流
​SRT Streamer是一个安卓手机端的开源SRT协议直播推流框架,可用于RTMP直播和SRT直播。SRT Streamer支持的视频编码包括H264、H265等等,支持的音频编码包括AAC、OPUS等等,可谓功能强大的APP直播框架。另一款APP直播框架RTMP Streamer支持RTMP直播和RTSP直播,不支持SRT协议的直播。而本文讲述的SRT Streamer支持RTMP直播和SRT直播,不支持RTSP协议的直播。有关RTMP Streamer的说明参见之前的文章《使用RTMP Streamer开启APP直播推流》,下面介绍如何使用SRT Streamer开启手机直播。
aqi00
36 4
FFmpeg开发笔记(四十五)使用SRT Streamer开启APP直播推流

热门文章

最新文章

  • 1
    MySQL高可用架构设计:从主从复制到分布式集群
  • 2
    现代Web开发中的前后端分离架构
  • 3
    “论微服务架构及其应用”写作框架,软考高级,系统架构设计师
  • 4
    RocketMQ与Kafka架构深度对比
  • 5
    云原生架构下的微服务治理实践
  • 6
    案例 采用Springboot默认的缓存方案Simple在三层架构中完成一个手机验证码生成校验的程序
  • 7
    云原生架构下的微服务治理实践
  • 8
    事件驱动作为分布式异步服务架构
  • 9
    “论数据访问层设计技术及其应用”写作框架,系统架构设计师
  • 10
    探索后端开发:微服务架构的演进与实践
  • 1
    uni-app 小兔鲜儿 Day 6(有作业)
    37
  • 2
    黑马程序员uni-app 小兔鲜儿 项目及bug记录(下) Day 5(有作业)
    73
  • 3
    黑马程序员uni-app 小兔鲜儿 项目及bug记录(上)(1)
    59
  • 4
    Swift开发——简单App设计
    205
  • 5
    k8s部署grafana beyla实现app应用服务依赖图可观测
    44
  • 6
    uni-app前端应用开发框架
    36
  • 7
    FFmpeg开发笔记(三十一)使用RTMP Streamer开启APP直播推流
    78
  • 8
    Android面试题:App性能优化之Java和Kotlin常见的数据结构
    28
  • 9
    Android面试题:App性能优化之电量优化和网络优化
    56
  • 10
    SpringCloud微服务实战——搭建企业级开发框架(四十七):【移动开发】整合uni-app搭建移动端快速开发框架-添加Axios并实现登录功能
    195
  • 相关课程

    更多
  • Serverless 函数计算架构
  • 架构的演进
  • MySQL企业常见架构与调优经验分享
  • 企业Web常用架构LAMP-LNMP实战
  • 企业级互联网分布式系统应用架构学习
  • 高校精品课-上海交通大学 -企业级应用体系架构
  • 相关电子书

    更多
  • 阿里云消息队列的 Serverless架构演进
  • 青团社云原生架构实践—亿级灵活用工平台的架构实践
  • 茶百道微服务架构升级及运维实践
  • 相关实验场景

    更多
  • 函数计算入门-HelloWorld应用开发
  • 每个IT人都想学的“Web应用上云经典架构”实战
  • MySQL引擎及架构优化
  • 基于数据湖架构的网站访问行为分析
  • 使用SLB+2ECS+NAS,部署电商web网站的高可用架构
  • 语言入门-1:环境构建
  • 下一篇
    【案例实战】SpringBoot整合阿里云文件上传OSS

    PHP网站源码西乡seo优化丹竹头外贸网站制作松岗网站推广方案东莞网站优化推广布吉网站推广工具光明网站搭建盐田百度竞价包年推广双龙网站优化推广坪山企业网站建设大浪百搜词包深圳优化坪地如何制作网站大鹏关键词排名福田百度网站优化坑梓阿里店铺托管丹竹头百姓网标王推广坂田百度竞价光明英文网站建设广州网站优化按天计费沙井百搜标王坂田高端网站设计沙井网站优化按天计费平湖网站优化软件坪地网站优化按天扣费坂田模板推广爱联SEO按天扣费永湖seo优化松岗网页设计深圳网站建设设计横岗设计公司网站歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

    PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化