前言
组件化、插件化与模块化已经深入体现到软件开发当中,也是为了让开发者更好的去解决软件上的高耦合、低内聚、无重用的3大代码问题。
概念
组件化
基于组件的软件工程 (CBSE) 也称为基于组件的发展 (CBD),是软件工程的一个分支,它强调在给定软件系统中提供的广泛功能方面的关注点分离。它是一种基于重用的方法,用于定义、实现和组合松散耦合的独立组件到系统中。这种做法旨在为软件本身和赞助此类软件的组织在短期和长期带来同样广泛的利益。
对应用功能的封装,一个功能一个组件。比如网络连接交互组件、即时通讯IM组件、数据库组件等。是对模块化更小的细分。
插件化
也是属于模块化的一种体现。将完整的项目按业务划分不同的插件,分治法,越小的模块越容易维护。单位是apk,一个完整的项目。作用与组件化不同于热更新,灵活性在于加载apk,按需下载,动态更新。
插件化就是要减小宿主程序apk包的大小,同时降低宿主程序的更新频率并做到自由装载模块、在线更新模块。
模块化
模块(Module),Android Studio提出的概念,根据不同关注点将原项目中共享的部分或业务抽取出来形成独立module,这就类似我们最集成的第三方库的SDK。
Module包含两种格式: application, library。一个Module就是一个小的项目,Module通过依赖来注入到主app工程中,也是AS概念中的模块。
区别与适用
通讯方式:
- 模块化:相互引入,抽取了common,其他模块自然要引入这个module。
- 组件化:主流是隐式和路由。隐式使解耦和灵活大大降低,因此路由是主流。
- 插件化:本身是不同进程,因此是binder机制进程间通讯。
宏观区别:
- 组件化:是基于重用,减少耦合。
- 模块化:是根据功能模块的不同而拆分的。
- 插件化:是将一个完整的工程,按业务划分为不同的插件。
体系区别图
组件化 VS 模块化
组件化 VS 插块化
上面主要讲解插件化模块化区别,那我们怎样去学好模块化、组件化、插件化呢?我们要想提升自己业务能力,那么这些肯定是要熟练掌握的。我这里从一位美团高级工程师手里拿到一份有关Android架构的资料;《架构的核心技术学习》我把整理后分享出来,希望大家可以合理利用起来。整理不易,如下部分截图:
项目适用
模块化是将功能拆分,分成相互独立的模块,以便于每个模块只包含与其自身功能相关的内容。从代码逻辑的角度进行划分,方便代码分层开发,保证每个功能模块的职能单一。 模块相应于业务逻辑模块,把同一类型项目里的功能逻辑进行进行需求性的封装。
像把个人中心内容都放在Person包里面组件相当于库,把一些能在项目里或者不同类型项目中可复用的代码进行工具性的封装。
插件化严格意义来讲,其实也算是模块化的观念。将一个完整的工程,按业务划分为不同的插件,都是分治法的一种体现。
本文到这快结束了,到这里想必你应该清楚它们的区别;而在业务开发时怎样去“妙用”,如何学好这些架构设计中的技术那么肯定需要很熟练掌握,这里就把那些大牛整理出来的架构设计技术分享在上面:《Android架构设计思想》;学完记得回来打卡哦!赞赞赞!
总结
组件化的单位是组件(module)。插件化的单位是apk(一个完整的应用)。组件化的灵活性在于按加载时机切换,分离出独立的业务功能组件,比如微信的朋友圈
插件化的灵活性在于是加载apk, 完全可以动态下载,动态更新,比组件化更灵活。
模块化的特点是:模块之间解耦,可以独立管理。将一个复杂业务实现,根据功能、页面或者其他进行不同粒度的划分程不同的模块,模块之间解耦,分别进行实现,也就是编程的模块化思想。
|