PlantUML Integration 编写短信服务类图

PlantUML Integration 写一个类图,主要功能为
1、编写一个serviceSms短信服务类;
2、需要用到短信的地方统一调用基建层的服务即可;
3、可以随意切换、增加短信厂商,不需要更改场景代码,只需要更改application.yml 里面的配置参数smsEffective的值即可完成切换;
4、方法签名1、类型 2、手机号 3、模板ID 4、泛型;
5、pplication.yml 里面的配置参数smsTest的值为true的时候,真实发送短信验证码,值为false的时候,不给用户发送验证码,仅写入将手机号+使用场景type为key、123456为值,写入缓存中;
6、方法签名的中的“类型”使用枚举,包含验证码、通知,如果值为“验证码”,需要将手机号+使用场景type为key、随机验证码为value,写入缓存中,过期时间为5分钟;

@startumlinterface SmsService {+ sendSms(type: SmsType, phoneNumber: String, templateId: String, content: T): boolean
}interface SmsProvider {+ sendSms(type: SmsType, phoneNumber: String, templateId: String, content: T): boolean
}class SmsProviderA {+ sendSms(type: SmsType, phoneNumber: String, templateId: String, content: T): boolean
}class SmsProviderB {+ sendSms(type: SmsType, phoneNumber: String, templateId: String, content: T): boolean
}class InfrastructureLayer {- SmsProvider smsProvider
}enum SmsType {VERIFICATION_CODENOTIFICATION
}class Cache {+ put(key: String, value: String, expiry: int): void+ get(key: String): String
}class ApplicationConfiguration {- boolean smsTest
}SmsService --* SmsProvider
SmsProvider <|.. SmsProviderA
SmsProvider <|.. SmsProviderB
SmsProviderA --* InfrastructureLayer
SmsProviderB --* InfrastructureLayer
SmsService *-- SmsType
SmsService o-- Cache
SmsService o-- ApplicationConfiguration' 注释
note top of SmsService
短信服务类,提供短信发送功能,控制发送模式,管理验证码缓存
end notenote top of SmsProvider
短信厂商接口,定义了发送短信的方法
end note
note top of SmsProviderA
厂商A实现
end note
note top of SmsProviderB
厂商B实现
end note
note top of Cache
验证码缓存类,用于存储和检索验证码
end note
note top of ApplicationConfiguration
应用配置类,用于控制短信发送模式
end note
note top of SmsType
短信类型枚举
end note
note top of InfrastructureLayer
基础设施层
end note@enduml

请添加图片描述

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

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

相关文章

【OpenCV】手写字符分割

OpenCV 是一个开源的计算机视觉&#xff08;Computer Vision&#xff09;与机器学习软件库&#xff0c;提供了多种图像处理算法与接口。在 OCR 技术中&#xff0c;字符分割用于提取图像中的文字信息&#xff0c;可以应用于车牌识别、身份证识别、文档扫描等场景。本文主要记录如…

【Flutter学习笔记】9.6 动画切换组件(AnimatedSwitcher)

参考资料&#xff1a;《Flutter实战第二版》9.6 动画切换组件&#xff08;AnimatedSwitcher&#xff09; 9.6.1 AnimatedSwitcher AnimatedSwitcher 可以同时对其新、旧子元素添加显示、隐藏动画&#xff0c;在需要切换新旧元素的场景广泛使用。也就是说在AnimatedSwitcher的子…

Java操作Sql语句 出现迭代死循环 (Bug排查)

目录 1. 问题所示2. 原理分析3. 解决方法4. 彩蛋1. 问题所示 Java执行Sql语句来查询一些数据的时候 虽说数据量很大,但是查询过程中一直迭代查询 截图如下所示: 2. 原理分析 至于迭代死循环,可能是不满足的条件也进入查询(本身我的数据量就很大) 主要可能引起的两个原…

Python数学建模-2.3函数(下)

2.3.2模块的导入与使用 模块在Python中是一个包含Python定义和语句的文件&#xff0c;通常用来组织代码&#xff0c;使得代码更易于管理和复用。下面&#xff0c;我将详细讲解Python函数中模块的使用知识。 1. 模块的导入 在Python中&#xff0c;你可以使用import语句来导入…

【新书推荐】29.1 32位汇编基本概念

第二十九章 32处理器体系结构 这一章我们将讲述32处理器体系结构。包括32位计算机的一些基本概念&#xff0c;32位处理器&#xff0c;程序加载执行的过程&#xff0c;32位计算机的硬件组成和输入输出系统。 29.1 基本概念 本节内容&#xff1a; ■实模式与保护模式 ■操作系…

【华为 ICT HCIA eNSP 习题汇总】——题目集16

1、下面哪一个最适合使用室内分布方式部署 WLAN&#xff1f; A、运动场 B、办公室 C、高校单排宿舍 D、广场 考点&#xff1a;无线局域网 解析&#xff1a;&#xff08;C&#xff09; 室内分布方式部署 WLAN 一般适用于需要大面积、高密度、高质量无线覆盖的场所&#xff0c;从…

读算法的陷阱:超级平台、算法垄断与场景欺骗笔记10_中间人

1. 中间人 1.1. 从积极的意义上讲&#xff0c;比价网站与搜索引擎这些“网络中间人”的存在有效提高了市场透明度&#xff0c;看似打造出了一片阻绝价格歧视、改善社会福利的乐土 1.2. 类似于“网络聚合器”的互联网巨头已经成为线上市场的重要中介 1.2.1. 网络聚合器实际上…

[Kali] 安装Nessus及使用

在官方网站下载对应的 Nessus 版本:Download Tenable Nessus | TenableDownload Nessus and Nessus Managerhttp://www.tenable.com/products/nessus/select-your-operating-system这里选择 Kali 对应的版本 一、安装 Nessus 1、下载得到的是 deb 文件,与

第四百零一回

文章目录 知识回顾示例代码经验总结 我们在上一章回中介绍了MethodChannel的使用方法&#xff0c;本章回中将介绍EventChannel的使用方法.闲话休提&#xff0c;让我们一起Talk Flutter吧。 知识回顾 我们在前面章回中介绍了通道的概念和作用&#xff0c;并且提到了通道有不同的…

centos7 install rocketmq 宿主机快速搭建RocketMQ单机开发环境

为什么采用宿主机而不采用 Docker 方式快速搭建 在搭建 RocketMQ 测试环境时&#xff0c;我们可以选择在宿主机上直接安装和配置&#xff0c;也可以使用 Docker 容器来快速搭建。然而&#xff0c;为什么我们选择了在宿主机上安装而不是使用 Docker 方式呢&#xff1f; 调整配置…

Android14之报错:error:add its name to the whitelist(一百九十四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

Vue手写模拟步骤条

效果图&#xff1a; 如果要使用element的步骤条就需要强行修改样式&#xff0c;参考之前的那篇步骤条。这里我采用手写div 代码&#xff1a; 思路是给最外层的div一个左边框&#xff0c;给里面的step-item设置左边框为图片&#xff0c;通过定位来移动。 <div class"m…