其实,模块化并没有你想的那么难

简介: 其实,模块化并没有你想的那么难

前言:不知道大家是不是像我没做模块化、组件化之前一样,感觉这个架构是一个很高深、很复杂的东西,做起来应该很难,其实做过之后你会发现模块化、组件化不过如此。这篇文章我将会向大家分享一下与模块化、组件化的一些知识,相信当你读过这篇文章后,你也会觉的模块化、组件化不过如此。

本文的基本结构

  本文的结构如下图,文章将会围绕下图列出的几点来详细的讲解模块化、组件化的知识。

模块化、组件化的概念

  模块化、组件化是一种架构思想、与平台无关的一种解耦手段。为什么我们总是把模块化、组件化放在一起呢?因为它们之间的关系是你中有我,我中有你的关系。就比如,我们将一个app拆分成几个功能模块,这几个模块肯定会依赖一些公共的组件,如网络组件、图片组件、音视频组件等,而这些组件中可能又会细分出一些模块,如图片组件中的,下载模块、缓存模块等。如果非要将它们两个区分开来,可能就是下面的定义:

  • 模块化:即可以表示上层的业务,也可以表示底层或者公用组件中的模块
  • 组件化:一般是在底层或则公用组件

为什么要模块化、组件化

  项目做的好好的,为什么要将项目改成模块化、组件化的架构呢?原因如下:

  1. 随着项目版本的不断迭代,项目的功能不断增多,代码就会变得越来越复杂,耦合度就会越来越高,可能一个小的改动就会影响到好多功能。
  2. 项目功能的不断增多,负责项目的开发人员可能由当初的一个人变成几个人来协同开发,这时可能就会出现大家都修改了某段代码或者都增加某些相同代码的情况。
  3. 随着代码的不断增加,我们编译整个项目的时间就会变得越来越长,严重影响开发效率。

将项目改成模块化、组件化的架构,就是为了解决上面出现的问题。

  其实不是每一个项目都应该有模块化、组件化的架构的。比如,我们做了一个小项目,这个项目的功能很少,并且以后也不会增加新功能,一个人开发这个项目完全没问题,在这种情况下,如果再用模块化、组件化的架构,简直就是杀鸡用牛刀、劳命伤财。

模块化划分的原则

  在我们将项目模块化的时候,就会面临怎么拆分模块的问题,所以在拆分模块化的时候就要遵循一些原则,需要遵循的原则就是

  • 同层模块间不能相互依赖。
  • 只能上层模块依赖下层模块,下层模块不能依赖上层。

为什么要说这两个原则呢?因为在模块化的时候你可能会遇到不知道将某段代码应该放在哪个模块中的问题,这时你就根据上面的原则来判断应该将代码放在上层还是下层或则应该放在哪个模块中。

  解释一下上面的两个原则,看下图

从图中可以看到,这里将模块化分成了四层,“同层之间不能相互依赖”这个原则,就是说在同一层的各个模块之间不能有依赖的关系,如在“业务功能模块”这一层可能会有几个功能模块,这几个功能模块之间是不能有依赖关系的。“只能上层模块依赖下层模块,下层模块不能依赖上层”这个原则就是不能让层级在下面的模块依赖上层的模块,如果有依赖关系,应该将被依赖的模块放在依赖模块的同层或则下层。

怎样拆分模块

  关于这个问题呢,并没有明确的答案。一般采用的做法就是将一些公用的并且不会变动或者不常改动的功能放在基础库中,如网络请求、图片加载及一些工具类等。基础组件着一层呢,就是放置一些第三方的SDK,如支付、统计、bug收集等。业务功能模块这一层就是放置我们项目功能有关的代码,这一层的拆分关系到以后开发的耦合度,因此要慎重,当然最合理就是一个功能拆分成一个模块,但这样就会出现拆分的粒度太小的问题,所以关于这一层的拆分最好是团队内讨论决定。最上面的一层就是app的壳了,这一层一般不会有什么功能,就是用来初始化项目,Android项目一般会将应用的application类放置在这层。

拆分后的模块应该怎样进行通讯

  从上面模块间划分的原则,可以知道,同层模块之间是不能相互依赖的,这就会出现“不能依赖,模块间怎么通讯的问题?”举个例子,在两个模块之间,如果一个ActivityA要跳转并传值给ActivityB,应该怎么传值呢?没有模块化的时候可以通过stratActivity或则startActivityForResult方法来显式跳转界面完成传值,但是在模块化开发时,可能ActivityA在A模块里ActivityB在B模块中,因为模块A和模块B在同一层,没有依赖关系,就不能直接传值了,那怎么解决这个问题呢?答案就是用路由的方式,在Android中一般是用ARoute开源库,使用这个库后只要定义好跳转的路径就行了,在打包app后就会根据定义好的路径找到对应的界面,关于具体的使用方法,大家可以自行搜索。

总结

  本文主要的内容是将模块化的思想说明了一下,本文的目的是让大家不再认为模块化是一个很难的架构,不再会因为觉得模块化是一个比较高深的东西而不敢尝试。如果在项目开始的时候不考虑模块化,那么随着项目的发展总有一天你会采用这个架构的,等项目大起来以后重新修改架构就不是那么容易了。希望大家在做项目的时候不要欠下技术债,如果技术债是不可避免的,那么应该尽早的偿还。

结束语

  文中并没有讲解模块化的具体实现,关于具体的实现细节网上已经有很多的文章了,可以根据自己的需要自行了解。本文主要就是让大家领会模块化的思想,理解思想之后,剩下的就是去实践了,相信读过本文之后,你做起模块化一定会事半功倍。



相关文章
|
25天前
|
自然语言处理 安全 API
通义千问大模型完整解析:核心能力、性能优势、行业落地与官方定价全解读
大模型技术正在深度重构各行各业的生产模式,从日常办公辅助、代码开发、内容创作,到企业业务流程改造、智能客服、法律文档处理、工业质检,大模型的应用边界持续拓宽。通义千问作为阿里云自研的通用大模型体系,拥有完整的模型矩阵,覆盖旗舰大参数模型、均衡通用模型、轻量极速模型、多模态视觉音频模型、代码专项模型,同时对外开放标准化API接口,支持个人开发者、中小企业、大型政企客户不同层级的业务需求。很多开发者与企业在选型的时候,会困惑不同模型版本之间的能力差异,不清楚各项功能的适用边界,对计费定价、订阅套餐、落地适配方案缺少完整认知。本文将从核心功能、性能优势、各行业落地场景、官方定价体系几个维度展开讲解,
5741 1
成功解决org.yaml.snakeyaml.scanner.ScannerException: mapping values are not allowed
成功解决org.yaml.snakeyaml.scanner.ScannerException: mapping values are not allowed
成功解决org.yaml.snakeyaml.scanner.ScannerException: mapping values are not allowed
|
9月前
|
人工智能
基于vite7.2+vue3.5+deepseek-v3.2高颜值流式ai会话助手
基于vue3.5+vite7.2+vant4+markdown+openai深度集成deepseek-v3.2聊天大模型。支持浅色+深色主题、stream流式输出、代码高亮、复制代码、katex公式、mermaid图表等功能。
475 4
|
12月前
|
消息中间件 运维 应用服务中间件
“企业微信iPad协议”凌晨断链:当最后一台测试机决定集体沉默
凌晨1:12,三连报警突响:“实例心跳超时”“消息队列堆积”“老板提刀赶来”。问题源于企业微信iPad协议迁移私有化后,因新旧CA根证书不兼容,触发TLS握手失败,导致全量会话中断。苹果严苛的证书校验机制将请求判定为中间人攻击,直接断连。排查抓包定位:客户端内置证书Pin仅认旧根。解决方案简单却关键:F5重导旧根证书,Nginx配置`ssl_trusted_certificate`指向旧链并reload。2:58,系统恢复,演练数据零丢失。教训深刻:文档未提CA白名单,真实逻辑藏于客户端二进制。部署前务必比对证书指纹,否则警报先于用户消息抵达。
585 1
|
人工智能 架构师 机器人
我是怎么把我的 AI 从“傻瓜”重构成“专家”的
本文分享了一次 Agent 项目的重构经验,讲述如何将一个僵化、被动的指令式系统,升级为具备内在驱动力的“专家”Agent。通过引入“动机层”和“成长机制”,让 Agent 更加主动、灵活并能自我优化,最终实现从“流水线工人”到“资深顾问”的蜕变。
|
人工智能 前端开发 API
手动开发?给我一条提示词,CodeBuddy能做的你都做不到!
本文介绍了使用CodeBuddy完成的一个五一期间的小项目,主要展示其编码能力。项目采用基础的HTML+CSS+JS实现界面,也提到可用React或Next.js复刻。文章重点讲解了通过提示词生成代码的方法,包括局部和整体两种方式,并展示了AI旅行规划功能的实现过程。通过与模型对话调整细节,最终生成满意的界面。CodeBuddy在前后端开发中表现出强大能力,未来可结合绘画作品生成惊艳网站。
598 1
|
算法 数据处理 数据库
生物学经典Blast序列比对算法原理,如何在R语言和Python中实现序列的比对分析?
生物学经典Blast序列比对算法原理,如何在R语言和Python中实现序列的比对分析?
|
存储 算法 Java
使用keytool 生成证书
keytool 简介 keytool 是java 用于管理密钥和证书的工具,官方文档其功能包括: 创建并管理密钥 创建并管理证书 作为CA 为证书授权 导入导出证书 主要格式keytool 采用 keystore 文件来存储密钥及证书,其中可包括私钥、信任证书;keystor...
8514 0
|
人工智能 安全 Linux
从龙蜥Anolis OS看国产操作系统的未来
作为我国的自主研发操作系统之一,龙蜥操作系统在技术创新和生态建设方面取得了一定的成绩。该操作系统以Linux为内核,结合国产化软硬件技术,具备了高度的自主可控性和安全性,在国家信息安全和国防安全方面具有重要意义。本文结合龙蜥操作系统的一些背景和亮点,引出对国产操作系统现状的深思,号召通过加强技术创新和生态建设、促进行业间的合作与交流、建立更加规范化的管理体系等方面,推动国产操作系统健康有序发展。只有这样,我们才能建立一个技术领先、安全可控、生态完善的国产操作系统生态,真正让国产操作系统成为一张具有丰富内涵和价值的名片。
从龙蜥Anolis OS看国产操作系统的未来
|
算法 大数据 数据处理
【软件设计师备考 专题 】IO控制方式(中断系统、DMA、IO处理机方式)
【软件设计师备考 专题 】IO控制方式(中断系统、DMA、IO处理机方式)
874 1

热门文章

最新文章