Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/iot-technology/iot-technical-guide
:honeybee: IoT Technical Guide --- 从零搭建高性能物联网平台及物联网解决方案和Thingsboard源码分析 :sparkles: :sparkles: :sparkles: (IoT Platform, SaaS, MQTT, CoAP, HTTP, Modbus, OPC, WebSocket, 物模型,Protobuf, PostgreSQL, MongoDB, Spring Security, OAuth2, RuleEngine, Kafka, Docker)
https://github.com/iot-technology/iot-technical-guide
coap gateway internet-of-things iot iot-platform jwt micorservice modbus mqtt multitenant nosql opc-ua real-time rule-engine thingsboard token tsl websocket
Last synced: 5 days ago
JSON representation
:honeybee: IoT Technical Guide --- 从零搭建高性能物联网平台及物联网解决方案和Thingsboard源码分析 :sparkles: :sparkles: :sparkles: (IoT Platform, SaaS, MQTT, CoAP, HTTP, Modbus, OPC, WebSocket, 物模型,Protobuf, PostgreSQL, MongoDB, Spring Security, OAuth2, RuleEngine, Kafka, Docker)
- Host: GitHub
- URL: https://github.com/iot-technology/iot-technical-guide
- Owner: IoT-Technology
- License: apache-2.0
- Created: 2019-04-02T01:52:44.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2023-09-05T12:28:00.000Z (over 1 year ago)
- Last Synced: 2025-01-09T19:36:26.207Z (12 days ago)
- Topics: coap, gateway, internet-of-things, iot, iot-platform, jwt, micorservice, modbus, mqtt, multitenant, nosql, opc-ua, real-time, rule-engine, thingsboard, token, tsl, websocket
- Language: Java
- Homepage: https://iot.mushuwei.cn/
- Size: 1.3 MB
- Stars: 4,222
- Watchers: 134
- Forks: 1,068
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 交流群
扫码如下**二维码**。回复【物联网技术指南】关键字。
可以添加帅气而又风趣的我为好友,并拉你进一个~~学习交流~~**装逼群**。
# 物联网技术学习指南
基于物联网场景和技术的入门和深度学习教程。
物联网相较于电商、支付和金融等是一个全新的行业。但是物联网又是一个高速发展的行业,很多人想要从事这个行业,但是不得其法,于是诞生了此教程。
市面上的物联网技术文章很少,且文章的质量都较为粗浅和不成体系。对于很多开发者来说,入门即是其对某个技术栈的最终理解,一方面是开发者“比较懒”,另一方面是文章作者把物联网技术写的太浅,又或者不够全面。
- 整理了物联网学习资源和书籍,涉及计算机网络、算法和书籍结构、框架、数据存储等每个细节的知识。
- 在学习基础知识的同时,我想要你了解物联网开发常见的~~**黑话**~~专业术语,例如数字孪生、设备影子、通信相关的术语名词、蓝牙、Zigbee、CoAP、MQTT协议等。
- 在带你学会MQTT v3.1、v3.1.1和v5.0协议的同时,我还想告诉你当前流行和好用的MQTT 客户端工具和不同语言的MQTT Client依赖包,最后以实战的方式带你实现一个单机百万的MQTT Broker。
- 学习上面的知识后,我相信你对物联网有所了解了,我允许你叉着腰**骄傲**一下,接下来我会带你学习从零搭建高性能IoT平台所需要的技术栈、包括架构设计、MQTT Broker搭建、CoAP服务搭建、消息削峰、数据模型设计和数据库选型等。
- 最好我带你编译和学习当前GitHub上最流行的开源物联网平台-[Thingsboard](https://thingsboard.io/), 其在GitHub上点赞超过1w+, 学习前沿的物联网理念和知识,如果你有二次开发的需求,也可沟通联系我欧!一起探讨学习!
- ...
让我们一起愉快的挖坑,挖深坑,哇哈哈。
## Part1 物联网基石和学习之路
### Part1-1『 物联网学习书籍和资源 』
* 计算机网络篇
* [《TCP/IP详情 卷1: 协议》](https://iot.mushuwei.cn/#/book/tcp-ip-part1)
* [《TCP/IP详情 卷2: 实现》](https://iot.mushuwei.cn/#/book/tcp-ip-part2)
* [《TCP/IP详情 卷3: TCP事务协议、HTTP、NNTP和UNIX域协议》](https://iot.mushuwei.cn/#/book/tcp-ip-part3)
* [《图解TCP/IP (第5版)》](https://iot.mushuwei.cn/#/book/tcp-ip-illustration)
* [《图解HTTP》](https://iot.mushuwei.cn/#/book/http-figure)* 算法和数据结构篇
* [《我的第一本算法书》](https://iot.mushuwei.cn/#/book/first-algorithm-book)
* [《算法导论 (第四版))》](https://iot.mushuwei.cn/#/book/algorithm-guide)* Java基础
* [《Head First Java》](https://iot.mushuwei.cn/#/book/head-first-java)
* [《Effective Java 中文版》](https://iot.mushuwei.cn/#/book/effective-java)
* [《Java并发编程实战》](https://iot.mushuwei.cn/#/book/java-current)* Spring及SpringBoot系列
* [《Spring 实战 (第四版)》](https://iot.mushuwei.cn/#/book/spring-action)
* [《Spring Boot揭秘》](https://iot.mushuwei.cn/#/book/spring-boot)* 数据存储篇
* [《MySQL必知必会》](https://iot.mushuwei.cn/#/book/mysql-know)
* [《高性能MySQL》](https://iot.mushuwei.cn/#/book/mysql-high-performance)
* [《MongoDB实战》](https://iot.mushuwei.cn/#/book/mongodb-action)
* [《PostgreSQL实战》](https://iot.mushuwei.cn/#/book/postgresql-action)* 缓存篇
* [《Redis 开发与运维》](https://iot.mushuwei.cn/#/book/redis-develop-operation)
* [《Redis深入历险:核心原理与应用实战》](https://iot.mushuwei.cn/#/book/redis-core-and-action)* 消息队列篇
* [《Kafka权威指南》](https://iot.mushuwei.cn/#/book/kafka-guide)
* [《Apache Kafka源码剖析》](https://iot.mushuwei.cn/#/book/netty-learning-example)* 通讯框架篇
* [《Netty实战》](https://iot.mushuwei.cn/#/book/netty-action)
* [《Netty实践学习案例》](https://iot.mushuwei.cn/#/book/netty-learning-example)* Docker&Kubernetes篇
* [《第一本Docker书》](https://iot.mushuwei.cn/#/book/first-docker-book)
* [《深入剖析Kubernetes 52讲》](https://iot.mushuwei.cn/#/book/kubernetes-52)### Part1-2『 物联网内功和基础知识 』
* 基础篇
* [《女朋友问: 你知道蓝牙耳机的原理吗?》](https://iot.mushuwei.cn/#/internal-work/bluetooth)
* [《直呼: 太细了!拿捏🤏Zigbee协议》](https://iot.mushuwei.cn/#/internal-work/zigbee)* 物联网概念篇
* [《通信相关的术语名词》](https://iot.mushuwei.cn/#/internal-work/commu-nouns)
* [《数字孪生&设备影子》](https://iot.mushuwei.cn/#/internal-work/digital-twins-and-device-shadow)* 设备配网篇
* [《WIFI设备-EZ配网》](https://iot.mushuwei.cn/#/internal-work/wifi-ez)
* [《WIFI设备-AP3.0配网》](https://iot.mushuwei.cn/#/internal-work/wifi-ap-3)* CoAP协议
* [《第一章 - 简介》](https://iot.mushuwei.cn/#/internal-work/coap-part1)
* [《第二章 - 受限应用协议CoAP》](https://iot.mushuwei.cn/#/internal-work/coap-part2)
* [《第三章 - 消息格式》](https://iot.mushuwei.cn/#/internal-work/coap-part3)
* [《第四章 - 消息传递》](https://iot.mushuwei.cn/#/internal-work/coap-part4)
* [《第五章 - 请求/响应的语义》](https://iot.mushuwei.cn/#/internal-work/coap-part5)
* [《第六章 - CoAP URI》](https://iot.mushuwei.cn/#/internal-work/coap-part6)
* [《第七章 - 发现》](https://iot.mushuwei.cn/#/internal-work/coap-part7)
* [《第八章 - 多播CoAP》](https://iot.mushuwei.cn/#/internal-work/coap-part8)
* [《第九章 - 安全CoAP》](https://iot.mushuwei.cn/#/internal-work/coap-part9)
* [《第十章 - CoAP和HTTP的跨协议代理》](https://iot.mushuwei.cn/#/internal-work/coap-part10)
* [《第十章 - 发现》](https://iot.mushuwei.cn/#/internal-work/coap-part11)
* [《第十二章 - 互联网地址分配注意事项(IANA Considerations)》](https://iot.mushuwei.cn/#/internal-work/coap-part12)* BACnet协议(楼宇自动化与控制网络)篇
* [《认识BACnet-第1部分-什么是BACnet?》](https://iot.mushuwei.cn/#/internal-work/bacnet-part1)
* [《认识BACnet-第2部分-设备模型》](https://iot.mushuwei.cn/#/internal-work/bacnet-part2)
* [《认识BACnet-第3部分-网络类型》](https://iot.mushuwei.cn/#/internal-work/bacnet-part3)
* [《认识BACnet-第4部分-服务》](https://iot.mushuwei.cn/#/internal-work/bacnet-part4)
* [《认识BACnet-第5部分-互操作领域》](https://iot.mushuwei.cn/#/internal-work/bacnet-part5)
* [《认识BACnet-第6部分-BIBBS》](https://iot.mushuwei.cn/#/internal-work/bacnet-part6)## Part2.『 MQTT学习指南三重境 』
### Part2-1『 一重境之求索:MQTT客户端工具和依赖包 』
* [《MQTT客户端桌面工具:school_satchel:》](https://iot.mushuwei.cn/#/mqtt-client-introduce/toolbox)
* [《MQTT.js: JavaScript 编写,用于 node.js 和浏览器》](https://iot.mushuwei.cn/#/mqtt-client-introduce/toolbox-mqttjs)
* [《MQTT X: 跨平台 MQTT桌面客户端》](https://iot.mushuwei.cn/#/mqtt-client-introduce/toolbox-mqttx)
* [《MQTT CLI: 有用的MQTT CLI命令行界面》](https://iot.mushuwei.cn/#/mqtt-client-introduce/toolbox-mqtt-cli)
* [《MQTT fx: 基于JavaFx的MQTT客户端》](https://iot.mushuwei.cn/#/mqtt-client-introduce/toolbox-mqttfx)* [《MQTT客户端库:hammer:》](https://iot.mushuwei.cn/#/mqtt-client-introduce/client-libraries)
* [《hivemq-mqtt-client: 高性能 Java 客户端库》](https://iot.mushuwei.cn/#/mqtt-client-introduce/client-lib-hivemq-client)
* [《paho.mqtt.java: Eclipse Java 客户端库》](https://iot.mushuwei.cn/#/mqtt-client-introduce/client-lib-paho-java-client)
* [《Paho.mqtt.golang: Eclipse Go 客户端库》](https://iot.mushuwei.cn/#/mqtt-client-introduce/client-golang)
* [《MQTT.js: JavaScript 编写,用于 node.js 和浏览器》](https://iot.mushuwei.cn/#/mqtt-client-introduce/client-lib-paho-golang-client)
* [《paho.mqtt.python: Eclipse Python 客户端库》](https://iot.mushuwei.cn/#/mqtt-client-introduce/client-lib-paho-python-client)
* [《paho.mqtt.c: Eclipse C 客户端库》](https://iot.mushuwei.cn/#/mqtt-client-introduce/client-lib-paho-c-client)### Part2-2『 二重境之实干:自研MQTT Broker,直通百万并发客户端 』
* 待补充
### Part2-3『 三重境之感悟:MQTT v3.1/v3.1.1中文协议文档 』
* [《第一章 - 介绍》](https://iot.mushuwei.cn/#/mqtt3/mqtt-introduce)
* [《第二章 MQTT控制报文格式 MQTT Control Packet format》](https://iot.mushuwei.cn/#/mqtt3/mqtt-control_packet_format)
* [《第三章 - MQTT控制报文》](https://iot.mushuwei.cn/#/mqtt3/mqtt-control_packets_03)
* [《3.1 CONNECT - 连接服务端》](https://iot.mushuwei.cn/#/mqtt3/mqtt-connect-0301)
* [《3.2 CONNACK – 确认连接请求》](https://iot.mushuwei.cn/#/mqtt3/mqtt-connack-0302)
* [《3.3 PUBLISH – 发布消息》](https://iot.mushuwei.cn/#/mqtt3/mqtt-publish-0303)
* [《3.4 PUBACK – 发布确认》](https://iot.mushuwei.cn/#/mqtt3/mqtt-puback-0304)
* [《3.5 PUBREC – 发布收到(QoS 2,第一步)》](https://iot.mushuwei.cn/#/mqtt3/mqtt-pubrec-0305)
* [《3.6 PUBREL – 发布释放(QoS 2,第二步)》](https://iot.mushuwei.cn/#/mqtt3/mqtt-pubrel-0306)
* [《3.7 PUBCOMP – 发布完成(QoS 2,第三步)》](https://iot.mushuwei.cn/#/mqtt3/mqtt-pubcomp-0307)
* [《3.8 SUBSCRIBE - 订阅主题》](https://iot.mushuwei.cn/#/mqtt3/mqtt-subscribe-0308)
* [《3.9 SUBACK - 订阅确认》](https://iot.mushuwei.cn/#/mqtt3/mqtt-suback-0309)
* [《3.10 UNSUBSCRIBE – 取消订阅》](https://iot.mushuwei.cn/#/mqtt3/mqtt-unsubscribe-0310)
* [《3.11 UNSUBACK – 取消订阅确认》](https://iot.mushuwei.cn/#/mqtt3/mqtt-unsuback-0311)
* [《3.12 PINGREQ – 心跳请求》](https://iot.mushuwei.cn/#/mqtt3/mqtt-pingreq-0312)
* [《3.13 PINGRESP – 心跳响应》](https://iot.mushuwei.cn/#/mqtt3/mqtt-pingresp-0313)
* [《3.14 DISCONNECT –断开连接》](https://iot.mushuwei.cn/#/mqtt3/mqtt-disconnect-0314)* [第四章 – 操作行为](https://iot.mushuwei.cn/#/mqtt3/mqtt-operational-behavior-04)
* [第五章 – 安全](https://iot.mushuwei.cn/#/mqtt3/mqtt-security-05)
* [第六章 – 使用WebSocket](https://iot.mushuwei.cn/#/mqtt3/mqtt-websocket-06)
* [第七章 – 一致性目标](https://iot.mushuwei.cn/#/mqtt3/mqtt-conformance-07)
* [附录B - 强制性规范声明](https://iot.mushuwei.cn/#/mqtt3/mqtt-appendixb-08)
### Part2-4『 三重境之感悟: MQTT v5.0中文协议文档』
* [《第一章 - 介绍》](https://iot.mushuwei.cn/#/mqtt5/mqtt-introduce)
* [《第二章 MQTT控制报文格式 MQTT Control Packet format》](https://iot.mushuwei.cn/#/mqtt5/mqtt-control_packet_format)
* [《第三章 - MQTT控制报文》](https://iot.mushuwei.cn/#/mqtt5/mqtt-control_packets_03)
* [《3.1 CONNECT - 连接服务端》](https://iot.mushuwei.cn/#/mqtt5/mqtt-connect-0301)
* [《3.2 CONNACK – 确认连接请求》](https://iot.mushuwei.cn/#/mqtt5/mqtt-connack-0302)
* [《3.3 PUBLISH – 发布消息》](https://iot.mushuwei.cn/#/mqtt5/mqtt-publish-0303)
* [《3.4 PUBACK – 发布确认》](https://iot.mushuwei.cn/#/mqtt5/mqtt-puback-0304)
* [《3.5 PUBREC – 发布收到(QoS 2,第一步)》](https://iot.mushuwei.cn/#/mqtt5/mqtt-pubrec-0305)
* [《3.6 PUBREL – 发布释放(QoS 2,第二步)》](https://iot.mushuwei.cn/#/mqtt5/mqtt-pubrel-0306)
* [《3.7 PUBCOMP – 发布完成(QoS 2,第三步)》](https://iot.mushuwei.cn/#/mqtt5/mqtt-pubcomp-0307)
* [《3.8 SUBSCRIBE - 订阅主题》](https://iot.mushuwei.cn/#/mqtt5/mqtt-subscribe-0308)
* [《3.9 SUBACK - 订阅确认》](https://iot.mushuwei.cn/#/mqtt5/mqtt-suback-0309)
* [《3.10 UNSUBSCRIBE – 取消订阅》](https://iot.mushuwei.cn/#/mqtt5/mqtt-unsubscribe-0310)
* [《3.11 UNSUBACK – 取消订阅确认》](https://iot.mushuwei.cn/#/mqtt5/mqtt-unsuback-0311)
* [《3.12 PINGREQ – 心跳请求》](https://iot.mushuwei.cn/#/mqtt5/mqtt-pingreq-0312)
* [《3.13 PINGRESP – 心跳响应》](https://iot.mushuwei.cn/#/mqtt5/mqtt-pingresp-0313)
* [《3.14 DISCONNECT – 断开连接》](https://iot.mushuwei.cn/#/mqtt5/mqtt-disconnect-0314)
* [《3.15 AUTH – 认证交换》](https://iot.mushuwei.cn/#/mqtt5/mqtt-auth-0315)* [第四章 – 操作行为](https://iot.mushuwei.cn/#/mqtt5/mqtt-operational-behavior-04)
* [第五章 – 安全](https://iot.mushuwei.cn/#/mqtt5/mqtt-security-05)
* [第六章 – 使用WebSocket](https://iot.mushuwei.cn/#/mqtt5/mqtt-websocket-06)
* [第七章 – 一致性目标](https://iot.mushuwei.cn/#/mqtt5/mqtt-conformance-07)
* [附录B - 强制性规范声明](https://iot.mushuwei.cn/#/mqtt5/mqtt-appendixb-08)
* [附录C - MQTT v5.0新特性总结 (非规范)](https://iot.mushuwei.cn/#/mqtt5/mqtt-appendixc-09)
## Part3.『 从零搭建高性能IoT平台 』
* 预习篇
* [《新基建和5G风口下的物联网平台》](https://iot.mushuwei.cn/#/iot-platform)
* [《理解SaaS多租户应用的架构和设计》](https://iot.mushuwei.cn/#/saas)* 设备接入篇
* [《白话MQTT基础知识和入门》](https://iot.mushuwei.cn/#/mqtt-basic)
* [《实现百万并发MQTT服务端》](https://iot.mushuwei.cn/#/high-performance-mqtt-server)
* [《初识CoAP并抓住它的"心"》](https://iot.mushuwei.cn/#/coap-basic)
* [《100行代码快速搭建功能完备的CoAP服务》](https://iot.mushuwei.cn/#/100-lines-of-code-realize-coap-service)
* [《重新认识HTTP协议并管理设备》](https://iot.mushuwei.cn/#/rethinking-http)
* [《实践案例: 车载终端设备的数据解析》](https://iot.mushuwei.cn/#/decoder-encoder-equipment-protocol)* 边缘计算篇
* [《工业领域下的Modbus网关设备》](https://iot.mushuwei.cn/#/gateway-modbus)
* [《工业领域下的OPC-UA网关设备》](https://iot.mushuwei.cn/#/gateway-opcua)* 设备、接口认证和安全篇
* Spring Security能量
* [《什么是JWT(JSON Web Token)?》](https://iot.mushuwei.cn/#/what-jwt)
* [《Spring Boot Security + JWT》](https://iot.mushuwei.cn/#/spring-security-without-jpa)
* [《Spring Boot Security + JWT + MySQL》](https://iot.mushuwei.cn/#/spring-security-jpa)
* 下一代安全实践OAuth2
* [《OAuth2.0 最简单的指南》](https://iot.mushuwei.cn/#/oauth2-guide)* 实时显示篇
* [《WebSocket技术魔法》](https://iot.mushuwei.cn/#/websocket)* 数据交换和序列化篇
* [《设备的语言-物模型》](https://iot.mushuwei.cn/#/tsl)
* [《平台无关并具有扩展性的gRPC下的ProtoBuf》](https://iot.mushuwei.cn/#/grpc-protobuf)* 存储和查询篇
* [《PostgreSQL碰撞IoT》](https://iot.mushuwei.cn/#/postgresql-iot)
* [《MongoDB在IoT中的应用》](https://iot.mushuwei.cn/#/mongodb-iot)* 流处理和消息队列篇
* [《简单实现一个消息队列》](https://iot.mushuwei.cn/#/how-to-build-queque)
* [《广受好评的Kafka》](https://iot.mushuwei.cn/#/kafka)
* [《从未缺席的RabbitMQ》](https://iot.mushuwei.cn/#/rabbitmq)* 规则引擎篇
* [《规则引擎在IoT的重要性》](https://iot.mushuwei.cn/#/what-rule-engine)
* [《Easy-Rules规则引擎在IoT的使用》](https://iot.mushuwei.cn/#/rule-engine-easyrules)
* [《带你走进ThingsBoard规则引擎的实现原理》](https://iot.mushuwei.cn/#/rule-engine-thingsboard)
* [《阿里云物联网平台规则引擎的面纱》](https://iot.mushuwei.cn/#/rule-engine-aliyun)* Docker和k8s篇
* [《Docker在IoT技术领域的应用》](https://iot.mushuwei.cn/#/docker-iot)
* [《DevOps的领头羊-Kubernetes》](https://iot.mushuwei.cn/#/devops-kubernetes)## Part4.『 Thingsboard源码解析 』
- 准备篇
- [《物联网时代-Thingsboard源码分析-调试环境搭建》](https://iot.mushuwei.cn/#/thingsboard/thingsboard-build)
- [《物联网时代-Thingsboard源码分析-项目结构说明》](https://iot.mushuwei.cn/#/thingsboard/project-structure)
- 设备连接协议篇
- [《MQTT设备连接协议-上》](https://iot.mushuwei.cn/#/thingsboard/mqtt-protocol-part1)
- [《MQTT设备连接协议-下》](https://iot.mushuwei.cn/#/thingsboard/mqtt-protocol-part2)
- [《CoAP设备连接协议》](https://iot.mushuwei.cn/#/thingsboard/coap-protocol)
- [《HTTP设备连接协议》](https://iot.mushuwei.cn/#/thingsboard/http-protocol)
- 存储和查询篇
- [《数据模型之用户相关表结构设计》](https://iot.mushuwei.cn/#/thingsboard/user-table)
- [《数据模型之设备相关表结构设计》](https://iot.mushuwei.cn/#/thingsboard/device-table)
- [《数据模型之规则引擎相关表结构设计》](https://iot.mushuwei.cn/#/thingsboard/rule-engine)
- [《领略Spring Data JPA在Thingsboard的使用》](https://iot.mushuwei.cn/#/thingsboard/jpa-sql)
- 网关篇
- [《网关之Modbus》](https://iot.mushuwei.cn/#/thingsboard/modbus)
- [《网关之OPC-UA》](https://iot.mushuwei.cn/#/thingsboard/opcua)
- 实时显示篇
- [《实时显示之WebSocket》](https://iot.mushuwei.cn/#/thingsboard/websocket)
- 数据交换和序列化篇
- [《数据交换和序列化篇之JSON》](https://iot.mushuwei.cn/#/thingsboard/tsl)
- [《数据交换和序列化篇之ProtoBuf》](https://iot.mushuwei.cn/#/thingsboard/protobuf)
- 设备、接口认证和安全篇
- [《Spring Security在接口的使用》](https://iot.mushuwei.cn/#/thingsboard/spring-security)
- [《紧跟安全前沿OAuth2》](https://iot.mushuwei.cn/#/thingsboard/oauth2)
- 流处理和消息队列篇
- [《流处理和消息队列篇之Kafka》](https://iot.mushuwei.cn/#/thingsboard/kafka)
- [《流处理和消息队列篇之RabbitMQ》](https://iot.mushuwei.cn/#/thingsboard/rabbitmq)
- 规则引擎篇
- [《Rule Engine解放你的双手》](https://iot.mushuwei.cn/#/thingsboard/rule-engine)
- Docker和kubernetes篇
- [《Docker和IoT的碰撞》](https://iot.mushuwei.cn/#/thingsboard/docker-iot)
- [《让人惊叹的Kubernetes》](https://iot.mushuwei.cn/#/thingsboard/kubernetes)
- 设计模式篇
- [《一文看尽命令模式》](https://iot.mushuwei.cn/#/thingsboard/command-design-pattern)