【架构师入门——什么是组件化】_软件产品的组件化-程序员宅基地

技术标签: 组件化  java  android  

架构师入门之组件化架构

什么是组件化,为什么要组件化

在我的理解看来组件化是android开发甚至其他软件开发行业的趋势,因为随着android的逐渐成熟,现在的app业务越来越复杂,与此同时,android工程也变得日益庞大,代码行数十几万已经是常态,此时有几个问题便会凸显出来:

  1. 编译时间过长,时间成本增大: 工程任何一点改动都会造成整个工程的重新编译.记忆最深的就是早期在没有进行组件化的时候,庞大的工程动辄需要十几分钟的编译时间,效率过于低下。
  2. 不易于维护和迭代更新: 整个工程中充斥的大量重复或者冗余的子模块,业务耦合度非常高,牵一发而动全身.这就造成了"老人不敢改,新人无法改",因为谁也不能预知在做修改之后,会产生什么影响.
  3. 不方便测试:.高度耦合的业务和模块导致无法下手进行测试,只能草草了事.
  4. 不利于团队协作,团队开发: 协作开发基本上是不可能的,天知道彼此在做什么.代码合并的的时候更是令人痛苦.

因此为了解决以上痛点提出了组件化的概念:将一个内容庞杂,功能丰富的app根据一定的原则拆分出来形成单独的模块,各个模块抽离出来单独运行就是具有某项功能的子app,例如拿微信举例子(这里我对微信源码不了解只做一个大概的分析)至少包含的几大模块:

  1. 即时通讯模块: 实现朋友之间聊天的功能(这部分一定是单独抽离出来的组件化模块,因为腾讯开放平台上对外提供了即时通讯的sdk)
  2. 分享模块: 实现应用之间的分享,例如淘宝商品图片分享给微信朋友(这部分也一定是单独抽离出来的组件模块,因为腾讯开放平台上对外提供了微信分享的sdk)
  3. 支付模块 实现钱包的支付功能(这部分也一定是单独抽离出来的组件模块,因为腾讯开放平台上对外提供了微信支付的sdk)

以前未进行组件化分离的项目:业务之间耦合严重,不利于维护在这里插入图片描述
按组件化架构分离后
在这里插入图片描述
Android APP组件化架构的目标是告别结构臃肿,让各个 业务 变得相对独立,业务组件在组件模式下可以独立开发,而在集成模式下又可以变为arr包集成到“app壳工程”中,组成一个完整功能的APP;

从组件化架构模型中可以看到,业务组件之间是相互独立的,没有相互关联和依赖,这些业务组件在集成模式下是一个个library,被app壳工程所依赖,组成一个具有完整业务功能的APP应用,但是在组件开发模式下,业务组件又变成了一个个application,它们可以独立开发和调试,由于在组件开发模式下,业务组件们的代码量相比于完整的项目差了很远,因此在运行时可以显著减少编译时间。

当然,组件化并不是说只有好处没有坏处,例如:

  • 组件化架构开发前期可能要花费更多的时间来进行模块拆分;如果是一个人的小项目完全没必要组件化开发,那样只会给自己带来更多的工作量;
  • 组件化可能会带来更多重复的代码;
  • 组件化需要良好的架构设计,包括怎么拆分业务,组件之间怎么通信等等,需要有个高水平的架构师统筹全局,经验不足的同学盲目进行组件化反而会适得其反,带来更多的麻烦;
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41692931/article/details/123028335

智能推荐

探索OpenCV-iOS:强大的计算机视觉库在iOS开发中的应用-程序员宅基地

文章浏览阅读486次,点赞9次,收藏8次。探索OpenCV-iOS:强大的计算机视觉库在iOS开发中的应用项目地址:https://gitcode.com/macmade/OpenCV-iOS简介OpenCV-iOS 是一个专为苹果平台优化的开源计算机视觉库,它将著名的 OpenCV 库无缝集成到iOS、macOS和tvOS开发中。通过提供C++接口,Objective-C类别,以及Swift模块,开发者可以轻松地利用OpenCV...

linux基础命令,图文说明_linux常用命令 图文-程序员宅基地

文章浏览阅读316次。Linux中许多常用命令是必须掌握的,这里将我学linux入门时学的一些常用的基本命令分享给大家一下,希望可以帮助你们。这个是我将鸟哥书上的进行了一下整理的,希望不要涉及到版权问题。1、显示日期的指令: date2、显示日历的指令:cal3、简单好用的计算器:bc怎么10/100会变成0呢?这是因为bc预设仅输出整数,如果要输出小数点下位数,那么就必须要执行 scale=number ,那个num..._linux常用命令 图文

逆向知识之CS1.6辅助/外挂专题.1.实现CS1.6主武器副武器无限子弹_cs1.6外挂-程序员宅基地

文章浏览阅读5.4k次,点赞3次,收藏11次。一丶主武器无限子弹寻找方法.首先我们知道.在CS中主武器有子弹个数.那么我们可以通过CE寻找子弹的个数增加或者减少来进行寻找我们的数据. 关于CE的使用.可以参考网络教程.很简单.主需要来回扫描即可.寻找思路:1.首次扫描子弹个数2.变化子弹继续扫描.3.重复2步骤.直到地址很少.4.过滤数据. 可以下拉到地址框中.锁定数据.然后更改游戏中子弹个数看看是否更改.如果没有更改则找到数据.(当然要不断过滤)5.找到基址.如果是动态地址.找访问地址一层一层寻找动态基址.如果是写入.那么找写入.一层一_cs1.6外挂

java计算机毕业设计汽车维修管理系统源代码+数据库+系统+lw文档_汽车维修管理系统源码-程序员宅基地

文章浏览阅读336次。springboot疫情期间中小学生作业线上管理系统设计与实现。JSP物流仓储仓库管理系统的设计与实现sqlserver。JSP计算机C语言学习网站的设计与实现sqlserver。springboot晨曦文学社在线投稿系统的设计与实现。ssm基于Vue的潍坊学院宿舍管理系统的设计与实现。ssm基于vue技术的汽车维修检测系统设计与实现。JSP网上测试系统的研究与设计sqlserver。JSP影城管理系统的设计与实现sqlserver。ssm基于JEE线上医药用品分销系统设计与实现。_汽车维修管理系统源码

MySQL 数据访问与查询优化:提升性能的实战策略和解耦优化技巧_mysql解耦合设计-程序员宅基地

文章浏览阅读2.3k次,点赞9次,收藏10次。该篇博文简要分析了为什么会查询慢?以不同角度的优化方式提高数据访问的效率,简单地分析 MySQL 语法解析器、查询优化器处理的过程,以理论+实战结合方式加深印象,提高辨识度;最主要的大数据量查询优化、海量数据优化处理,这些场景都是博主在实际工作中处理过的,实战是校验真理的唯一标准,解耦设计、异步、缓存、适当反范式化设计等,都是一些日常中会使用的技术场景,后面会有文章主要讲述 MySQL 锁、MVCC、分区等概念|实战_mysql解耦合设计

android 圆形按钮结合selector和shape实现_android selector圆弧-程序员宅基地

文章浏览阅读3.3k次。公司突然来了个需求,做在圆弧里放置图片,点击并有背景效果,于是就采用了selector和shape结合,因做个记录;首先采用一个ImageView来实现圆全和点击背景效果,定义shape明名为round_normal,和round_pressed,注意shape=”oval”属性:round_normal.xml ="http://sc_android selector圆弧

随便推点

论文-Edge Boxes-程序员宅基地

文章浏览阅读537次。Edge Boxes:Locating Object Proposals from EdgesEdges Boxes:Locating Object Proposals from EdgesProposal:(1), 对于一张image,计算每一个pixel的edge response,在paper中使用Structured Edge Detector来判断物体的边..._edge boxes: locating object proposals from edges

蓝桥杯 递归类型题目小结-程序员宅基地

文章浏览阅读660次,点赞3次,收藏14次。最近几天在刷蓝桥杯往年的真题, 发现数据结构方面的考察较少, 许多问题可以通过递归解决. 还有两套往年试题没有刷, 先就已经刷的题目总结一下.几种常见的递归题目1. 类型一2. 类型二3. 类型三4. 类型四5. 其他类型类型一描述: 这类递归题目的原型是让一个字符串全排列, 比如说现在有字符串"abc", 它还可以有"acb", "bac", "bca", "cab", "c..._蓝桥杯的递归题目多吗

web、telent开启方式和账号_192.168.11.4:8888-程序员宅基地

文章浏览阅读614次。Web:浏览器输入192.168.10.1http://192.168.10.1/cgi-bin/index2.aspadmin 1234telent开启方式:#浏览器http://192.168.10.1/cgi-bin/telnet.asp#命令行telnet 192.168.10.1 4719admin1234_192.168.11.4:8888

【蓝桥杯选拔赛真题43】C++拼写单词 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解析-程序员宅基地

文章浏览阅读934次,点赞20次,收藏14次。C++拼写单词第十届蓝桥杯青少年创意编程大赛C++选拔赛真题一、题目要求1、编程实现四种水果的英文单词,分别为 Apple、Banana、Orange、Pear,老师通过提示每个单词的首字母,让同学将对应的单词拼写下来。请编写程序:当输入的大写字母为"A"时,则输出"Apple";当输入的大写字母为"B"时,则输出"Banana";当输入的大写字母为"O"时,则输出"Orange";当输入的大写字母为"P"时,则输出"Pear"。2、输入输出输入描述:只有一行,输入 A、B、0、P

【Android 11】使用Android Studio调试系统应用之Settings移植(五):编译Settings 模块、解决编译错误_settings 编译-程序员宅基地

文章浏览阅读2.9k次。基于Andorid 11,系列第5篇文章,本章开始,终于轮到解决正主Settings的编译问题了,使用android studio编译出Settings.apk,能看到这一章的同学,也着实不容易了,再接再厉_settings 编译

【CANN训练营三步入门独家绝技】AIPP与DVPP的介绍与使用_aipp包括以下哪些模式-程序员宅基地

文章浏览阅读709次。CANN提供了AIPP和DVPP两种处理图像/视频数据的方式,AIPP和DVPP可以分开使用也可以组合使用,两者功能有部分重叠。AIPP和DVPP可以分开独立使用,也可以组合使用,组合使用情况下,一般先使用DVPP对图片或者视频进行解码、抠图、缩放等操作,然后再使用AIPP对DVPP处理后的图片进行格式、色域等转换,使输入符合模型的要求。_aipp包括以下哪些模式

推荐文章

热门文章

相关标签