【架构设计】模块化-面向接口编程

模块化的优势

  1. 结构清晰:业务独立,代码实现分离
  2. 便于协作:耦合度低,不会影响团队其他成员的开发进度
  3. 便于维护:各模块管理自身代码、布局、资源,不影响主工程

模块化的特点

高内聚,低耦合

常见的模块化方法

  1. 所有模块都放在一个工程里实现
  2. 每个模块都放在一个独立工程中实现

模块的划分

从高到低

  1. 业务层
  2. 平台能力层
  3. 基础层

模块间的通信

  1. 直接依赖
  2. 事件或广播通信
  3. 路由通信
  4. 面向接口通信

具体实现

直接依赖

实现简单,耦合严重,不方便维护与开发。

事件和广播通信

EventBus:事件总线型通信框架,十分灵活,采用注解方式实现,但是难以追溯事件。

广播:一个模块中发送广播数据,感兴趣的模块进行注册广播接收数据。使用这种方式,资源开销会较大。

总结:

事件通信、广播都比较灵活,并且模块之间无偶尔度。但是,代码的可读性差,难以追溯事件,不推荐。

路由通信

模块与模块之间不存在依赖关系,而是各自运作

面向接口编程

核心思想是,先定义底层接口模块,也就是通信的协议与功能约定,是提供方实现对应的功能与能力。

在架构开发过程中,无需关注具体实现,开发中可以通过接口快速制定协议,与提供能力的API。

面向接口编程的好处

灵活性高,无具体依赖,实现层可以任意更改与切换。

面向接口编程的步骤

  1. 定义接口
  2. 提供方实现接口
  3. 使用方都通过服务工厂获取服务使用

为什么有了路由通信,还需要使用面向接口编程呢?

路由通信,虽然解决了耦合的问题,但是调用的方法都是静态的。对于传参与返回值只能是基本类型。若是对象需要进行序列化和反序列化,就会对性能产生一定的影响。所以,需要使用面向接口。比如:一个读卡的操作,业务层需要对它进行开关、暂停等操作,通过接口可以很好的返回一个服务控制器,然后直接进行相应的操作即可。

总结:

通过路由通信,可以很好的解决模块间耦合,但是拿不到对象无法持续交互,并且需要序列化,而通过面向接口编程,可以很好的解决这一点,并且代码的可读性较高。但是面向接口又会存在一定的耦合性,也就是依赖了服务侧的API,但是对于收益来说还是值得的。

所以,路由通信+面向接口编程,是比较优秀的解法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/858235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华硕笔记本重装系统详细操作,图文教程体验Win11如何重装系统

随着科技的不断发展,电脑操作系统的步骤也在不断更新迭代。对于华硕笔记本用户来说,升级到Windows 11操作系统可以带来更好的使用体验。本文将通过图文教程的形式,详细介绍华硕笔记本重装Windows 11系统的操作步骤,帮助用户顺利完…

【面试】i++与++i的区别

目录 1. 情况11.1 i1.2 i 2. 情况23. 情况34. 情况4 1. 情况1 1.1 i 1.代码块 public void test(){int i 10;i;System.out.println(i);}2.字节码 0 bipush 102 istore_13 iinc 1 by 16 getstatic #2 <java/lang/System.out : Ljava/io/PrintStream;>9 iload_1 10 inv…

LeetCode | 344.反转字符串

设置头尾两个指针&#xff0c;依靠中间变量temp交换头尾指针所指元素&#xff0c;头指针后移&#xff0c;尾指针前移&#xff0c;直到头尾指针重合或者头指针在尾指针后面一个元素 class Solution(object):def reverseString(self, s):""":type s: List[str]:r…

如和完全免费快速访问外网?有亿点点不便利罢了

很鸡肋&#xff0c;但是可以试试 这个手机是真的可以使用谷歌的 不得不说有点意思&#xff0c;但肯定没啥用 地址跳转

半导体建新厂,信息化该如何配合

半导体厂从建设到稳定量产的过程包含多个关键里程碑阶段&#xff0c;每个阶段都有其重点工作内容和目标&#xff0c;以及相应的信息化手段来支持目标的实现&#xff1a; 1. 项目启动与规划阶段&#xff1a; - 重点工作内容&#xff1a;定义项目范围、目标、时间表和预算。 - 目…

怎么用Excel生成标签打印模板,自动生成二维码

环境&#xff1a; EXCEL2021 16.0 问题描述&#xff1a; 怎么用excel生成标签打印模板自动生成二维码 解决方案&#xff1a; 在Excel中生成标签打印模板并自动生成二维码&#xff0c;可以通过以下几个步骤完成&#xff1a; 1. 准备数据 首先&#xff0c;确保你的Excel表…

SyntaxWarning警告

为什么conda环境运行hipcc vector_add.cpp -o vector_add -v会出现&#xff1a; SyntaxWarning: invalid escape sequence \w staticVars(search_namere.compile("gfx[0-9a-fA-F](:[-:\w])?")) SyntaxWarning: invalid escape sequence \A line_search_term re…

嵌入式软件面试记录(5)

1.FreeRTOS使用&#xff0c;是自己移植的吗&#xff0c;移植过程中设置了多少个任务&#xff1f; 答&#xff1a;是自己移植的&#xff0c;从官网下载的包根据手册移植的。 主要涉及以下几个任务&#xff1a; 主任务&#xff1a;负责系统初始化和创建其他任务。创建队列任务点…

【LinuxC语言】IP地址相关的函数

文章目录 前言inet_addr()inet_aton()inet_ntoa()示例代码总结前言 在Linux C语言编程中,处理网络通信是一个核心主题,其中涉及到的IP地址相关函数扮演着至关重要的角色。这些函数允许我们在不同的网络层次上操作和管理IP地址,从而实现有效的数据传输和通信控制。本文将介绍…

Vue3 【仿 react 的 hook】封装 useTitle

效果预览 页码加载时&#xff0c;自动获取网页标题通过input输入框&#xff0c;可以实时改变网页标题 代码实现 index.vue <template><h1>网页的标题为&#xff1a; {{ titleRef }}</h1><p>通过input输入框实时改变网页的标题 <input v-model"…

大模型只有推理功能,没有调用能力

大模型主要具备推理功能&#xff0c;而没有直接调用外部服务或执行具体操作的能力。它的核心功能是基于输入文本进行自然语言处理和生成&#xff0c;而不是与外部环境进行交互或执行具体的操作指令。因此&#xff0c;大模型在应用场景中通常被用于推理和生成文本&#xff0c;而…

TouchSocket的WebAPI开发服务端

TouchSocket.Net(包括 C# 、VB.Net、F#)的一个整合性的 socket网络通信框架用于TCP通讯&#xff0c;也可以udp、ssl等一系列的通信模块。 大家都使用过其他的Socket产品&#xff0c;那么TouchSocket在设计时也是借鉴了其他产品的优秀设计理念&#xff0c;数据处理适配器就是其…

2024年6月23日 语法纠正

Certainly! Below is a comparison of the original content and the polished version, with explanations for the changes: Original: “Good afternoon, everybody! Hopefully not disturb your wonderful weekend.” Polished: “Good afternoon, everyone! I hope I’m n…

【Vision AI v2开箱之SenseCraft AI猫狗识别Arduino教程】

【Vision AI v2开箱之SenseCraft AI猫狗识别Arduino教程】 1. 前言2. 实验材料2.1 Grove Vision AI Module V22.1.1 特征2.1.2 硬件概述2.1.3 启动/重置/程序2.1.4 驱动 2.2 ESP32C32.2.1 引脚图2.2.2 组件概述2.2.3 电源引脚 2.3 SenseCraft AI Model Assistant2.3.1 部署的模…

从低代码开发看,国企数字化转型的思考与探索

引言 在我国新时代发展战略背景下&#xff0c;国有企业作为国家经济的重要支柱&#xff0c;正面临着从传统经营模式向数字化转型的挑战。数字化转型不仅能提高企业经营效率&#xff0c;还能为企业创新提供强大动力。低代码开发作为一种新兴的软件开发模式&#xff0c;有助于简化…

【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【13】压力压测JMeter-性能监控jvisualvm

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【13】压力压测JMeter-性能监控jvisualvm 压力测试概述性能指标 JMeter基本使用添加线程组添加 HTTP 请求添加监听器启动压测&查看分析结果JMeter Address Already in use 错误解决 性…

Hive数据锁问题处理

在测试环境有定时任务会定期将flume采集的数据load到hive表中&#xff0c;在查看yarn application过程中发现load操作没有执行&#xff0c;且后续的任务在上一个任务执行结束后很久才开始。感觉像是阻塞一样&#xff0c;于是手动执行相关脚本&#xff0c;发现也是会卡住&#x…

【Linux】进程间通信上 (1.5万字详解)

目录 一.进程间通信介绍 1.1进程间通信的目的 1.2初步认识进程间通信 1.3进程间通信的种类 二.匿名管道 2.1何为管道 2.1实现原理 2.3进一步探寻匿名管道 2.4编码实现匿名管道通信 2.5管道读写特点 2.6基于管道的进程池设计 三.命名管道 3.1实现原理 3.2代码实现 四.…

视觉理解与图片问答,学习如何使用 GPT-4o (GPT-4 Omni) 来理解图像

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、引言 OpenAI 最新发布的 GPT-4 Omni 模型&#xff0c;也被称为 GPT-4o&#xff0c;是一个多模态 AI 模型&#xff0c;旨在提供更加自然和全面的人机交互体验。 GPT-4o 与 GPT-4 Turbo 都具备视觉功…

SuiNS发布子名及新命名标准,推动Web3身份结构的进步

SuiNS子名是Sui Name Service的强大扩展&#xff0c;最近与新命名标准一起发布。子名允许用户在一个主要的SuiNS名下创建额外的自定义身份&#xff0c;而无需额外费用。用户 gia 可以创建如 gaminggia 或 lendinggia 这样的子名&#xff0c;从而增强个人组织和支持群组与组织的…