前言
已经很久很久没有更新博客了,去年后半年太忙,没怎么抽出时间来写博客。之后给本身定个小目标,无论多忙,每周都要写一篇博客。闲话很少说,下面开始扯正题,最近有个同事问我“模块化、组件化,插件化还有热更新他们之间有什么关系和区别?“web
概述
随着产品的业务不断的增长,咱们的APP中代码就会愈来愈多,这时侯为了方便咱们多个成员之间协同开发,因此就出现的根据业务,将咱们代码分割为不一样的模块(用户中心模块,首页模块,启动模块,消息模块等),即便这样随着业务的增长仍是会出现如下问题
一、APP的体积愈来愈大,功能模块愈来愈多,编译速度变慢,但并非全部的用户都用到每一个模块。
二、模块间的耦合程度高,协同开发的成本愈来愈大。
这个时候咱们就出现了组件化,根据业务,把耦合度高的组件或基础库,抽离出来,造成单独的组件,在底层供其余上层模块调用。同时因为APP体积大,一个APP包含太多模块,并非全部的模块都会用到,因此就出现了,先有一个壳(宿主APP),而后根据用户须要动态加载其余模块的APK,这就是插件化技术。咱们上线后有时候会出现须要紧急修复的bug,这时候若是改bug从新出包,很麻烦,耗费人力。因此就出现了热修复技术。
架构
模块化
定义: 就是按照业务逻辑,将功能属于同一业务的代码整合到一块儿,模块的功能相对比较复杂。
使用: 咱们APP中通常都包含首页,用户中心,启动,消息中心等模块,根据业务将属于他们各自的代码整合在一块儿,造成模块化。
目的 隔离,高内聚
架构定位 横向分层,根据业务逻辑进行划分。svg
组件化
定义: 个人理解组件化就是,咱们开发中的一种设计思想,咱们在组件化的过程当中,有些组件或基础库在多个模块中都有调用,咱们能够把这些耦合度高的提炼出来,造成组件。供上层模块调用。
使用 将咱们用到的ListView,TabView,Dialog等抽离成单独的组件。
目的复用 解耦
架构定位纵向分层模块化
插件化
顾名思义,它是把某个功能或者业务模块,单独抽离出来以减小宿主APP的体积,在使用该模块的时候再去加载它,这就是插件化技术。
对于插件化来讲他将APP分红多个模块每一个模块都是一个APk,而对组件化来讲每一个模块是一个lib。
组件化
热修复
热修复就是不用二次安装客户端,在用户没有感知的状况下,修复线上的bug。插件
组件化和模块化的比较
组件化更增强调的是复用,低耦合,一个组件可以在多个模块中重复调用,而模块化更增强调业务的高内聚,相近的业务功能都在同一模块中。设计
组件化和插件化的比较
一、组件化是一种思想,插件化是一种技术。
二、组件化中每一个模块对应的是一个lib,而插件化中每一个模块对应的是一个apk。
三、组件化是为了提升代码中的内聚度,而插件化是为了减小宿主APP的体积而出现的。xml
插件化和热修复的比较
一、二者都是动态加载技术的应用。
二、插件化的对象是插件,也就是要加载运行APK包。 而热修复的对象是补丁,就是要加载运行patch,dex,jar等一系列包含dex修复内容的文件。对象