9.1.领域驱动设计
目录
一、领域驱动设计核心哲学
-
战略设计与战术设计的分野 • 战略设计:限界上下文(Bounded Context)与上下文映射(Context Mapping) • 战术设计:实体、值对象、聚合根、领域服务的构建原则
-
统一语言(Ubiquitous Language)实践 • 领域专家与开发团队的协作范式(Event Storming工作坊设计) • 代码与文档的同步策略(Swagger + DDD Glossary)
二、领域模型设计与实现
-
领域模型构建方法论 • 四色建模法:时标对象(Moment-Interval)、角色(Role)、描述(Description)、参与方(Party) • 事件风暴(Event Storming):从业务事件到领域模型的推导流程
-
战术模式落地 • 聚合根设计:一致性边界与并发控制(乐观锁/悲观锁策略) • 领域事件:事件溯源(Event Sourcing)与消息中间件(Kafka/RocketMQ集成) • 防腐层(Anti-Corruption Layer):遗留系统适配与第三方服务隔离
三、大厂领域驱动架构实战
-
阿里电商商品中心案例 • 挑战:亿级SKU的复杂属性管理与搜索优化 • 方案: ◦ 商品核心域与供应链支撑域的限界上下文拆分 ◦ 基于领域事件的商品状态同步(Binlog + Canal实时监听)
-
腾讯金融支付清结算系统 • 挑战:多币种混合结算的复杂规则与审计合规 • 方案: ◦ 值对象模式实现货币计算(BigDecimal精度控制 + 汇率服务防腐层) ◦ 聚合根事务一致性保障(Saga模式 + 分布式事务框架Seata)
-
美团外卖订单履约系统 • 挑战:高峰期每秒10万订单的领域状态机管理 • 方案: ◦ 订单聚合根的并发控制(Redis分布式锁 + 数据库行锁混合策略) ◦ 领域事件驱动履约流程(订单创建 → 支付 → 派单 → 配送的状态迁移)
四、DDD与现代化架构融合
-
微服务架构下的DDD落地 • 限界上下文与服务边界的映射关系 ◦ 一上下文一服务 vs 一上下文多服务(基于团队与业务复杂度权衡) • 领域模型与REST/GraphQL API的设计协同 ◦ API资源模型到领域模型的转换策略(HATEOAS与领域动作的映射)
-
云原生与DDD的协同演进 • Sidecar模式承载防腐层逻辑:Envoy WASM实现协议转换与数据清洗 • Serverless领域函数设计:AWS Lambda实现无状态领域服务(如风控规则引擎)
-
中台化架构的DDD适配 • 业务中台的核心域抽象:用户中心、商品中心、交易中心的领域服务下沉 • 数据中台的领域模型扩展:基于领域事件的实时数仓构建(Flink + Hudi)
五、工具链与效能提升
-
DDD全生命周期工具 • 设计工具:Visual Paradigm领域建模、Miro在线事件风暴 • 代码生成:IDEA插件(如DDD Plugin)自动生成聚合根/仓储代码 • 测试验证:Cucumber + SpecFlow实现领域场景BDD测试
-
框架与中间件集成 • DDD框架选型:COLA架构 vs Axon Framework vs 自研框架 • 领域事件总线:Spring Cloud Stream与RocketMQ/Redis Stream集成
一、领域驱动设计核心哲学
1. 战略设计与战术设计的分野
战略设计:限界上下文与上下文映射
限界上下文(Bounded Context) 是领域驱动设计的核心战略模式,用于界定领域模型的边界。每个限界上下文对应一个独立的业务子域,拥有专属的领域模型和统一语言。
示例:电商系统上下文划分 • 商品上下文:管理SKU、库存、类目属性。 • 订单上下文:处理下单、支付、履约流程。 • 用户上下文:负责注册、登录、权限管理。
上下文映射(Context Mapping) 定义不同上下文间的交互方式,常见模式包括: • 合作关系(Partnership):两个上下文紧密协作,共享部分模型(如订单与物流)。 • 防腐层(Anti-Corruption Layer):隔离外部系统或遗留代码,避免污染核心域(如集成第三方支付)。
战术设计:实体、值对象、聚合根的构建原则
• 实体(Entity):具有唯一标识的对象(如订单ID)。
public class Order { private String orderId; // 唯一标识 private OrderStatus status; // 业务行为方法 public void cancel() { this.status = OrderStatus.CANCELLED; } }
• 值对象(Value Object):无唯一标识,通过属性定义(如地址)。
public class Address { private String province; private String city; // 值对象相等性由属性决定 @Override public boolean equals(Object obj) { ... } }
• 聚合根(Aggregate Root):一致性边界的管理者(如订单聚合根控制订单项变更)。
public class OrderAggregate { private Order order; private List<OrderItem> items; // 保证业务规则:订单总金额≥0 public void addItem(OrderItem item) { if (this.calculateTotal() + item.getPrice() < 0) { throw new IllegalStateException("Invalid total amount"); } this.items.add(item); } }
2. 统一语言(Ubiquitous Language)实践
领域专家与开发团队的协作范式
通过 Event Storming 工作坊 对齐业务与技术的理解:
-
事件风暴流程: • 识别领域事件:如“订单已创建”、“支付已成功”。 • 标注命令与角色:谁(用户/系统)触发了什么操作。 • 划分限界上下文:确定事件归属的领域边界。
-
产出物: • 事件流图(贴在墙上的便签矩阵)。 • 核心领域模型初稿。
代码与文档的同步策略
• Swagger 文档:API 设计需反映领域动作(如 /orders/{id}/cancel
)。 • DDD Glossary:维护术语表,确保业务词汇在代码中一致。
| 术语 | 定义 | 代码对应类 | |--------------|-----------------------------|------------------| | 订单 | 用户购买商品的交易凭证 | OrderAggregate | | 库存保留 | 预占商品库存以确保可售性 | InventoryService |
二、领域模型设计与实现
1. 领域模型构建方法论
四色建模法:时标对象、角色、描述、参与方
• 时标对象(Moment-Interval):记录业务关键时间点或时段(如订单创建时间)。 • 角色(Role):对象在特定场景下的职责(如用户作为“买家”角色)。 • 描述(Description):对象的静态属性(如商品规格参数)。 • 参与方(Party/Place/Thing):参与业务的主体(如用户、仓库、物流公司)。
示例:电商订单四色模型
classDiagram class Order { <<Moment>> String orderId Date createTime void cancel() } class User { <<Party>> String userId String role } Order --> User : placed by
事件风暴(Event Storming)推导领域模型
从业务事件到代码模型的转化流程:
-
事件抽取:梳理业务流程中的领域事件(如
OrderPlaced
、PaymentCompleted
)。 -
命令识别:确定触发事件的操作(如
PlaceOrderCommand
)。 -
聚合根设计:将事件和命令归属到聚合根(如
OrderAggregate
处理订单状态变更)。
2. 战术模式落地
聚合根设计:一致性边界与并发控制
• 一致性规则:聚合根负责维护内部对象的状态一致性。
public class OrderAggregate { private List<OrderItem> items; // 添加商品时校验库存 public void addItem(Product product, int quantity) { if (!product.isAvailable(quantity)) { throw new InsufficientStockException(); } items.add(new OrderItem(product, quantity)); } }
• 并发控制策略: • 乐观锁:通过版本号(@Version
)避免更新冲突。 • 悲观锁:数据库 SELECT FOR UPDATE
锁定聚合根。
领域事件:事件溯源与消息中间件集成
• 事件溯源(Event Sourcing):通过事件序列重建聚合根状态。
public class OrderAggregate { private List<DomainEvent> changes = new ArrayList<>(); public void cancel() { apply(new OrderCancelledEvent(this.orderId)); } private void apply(DomainEvent event) { // 更新状态并记录事件 changes.add(event); } }
• Kafka集成:发布领域事件供其他上下文订阅。
@Service public class OrderEventPublisher { @Autowired private KafkaTemplate<String, DomainEvent> kafkaTemplate; public void publish(OrderCancelledEvent event) { kafkaTemplate.send("order-events", event); } }
防腐层(Anti-Corruption Layer)隔离第三方服务
场景:集成外部支付系统,避免其API污染核心支付域模型。
public class PaymentAdapter { // 转换外部支付接口响应为内部领域模型 public PaymentResult adapt(ThirdPartyPaymentResponse response) { return new PaymentResult( response.getStatus().equals("SUCCESS") ? PaymentStatus.SUCCESS : PaymentStatus.FAILED, response.getTransactionId() ); } }
总结
本节深入解析了DDD的核心哲学与战术实践: • 战略设计 通过限界上下文划分复杂业务,战术设计 提供可落地的代码结构。 • 统一语言 确保业务与技术的一致性,事件风暴 是团队协作的关键工具。 • 聚合根与领域事件 是保障一致性和扩展性的核心模式,防腐层 解决系统集成中的模型污染问题。
大厂实战经验: • 阿里商品中心:通过聚合根管理十亿级SKU的库存一致性。 • 腾讯支付系统:利用事件溯源实现分布式事务的最终一致性。 • 美团订单履约:通过防腐层隔离第三方物流接口,提升系统稳定性。
这些模式与案例为企业构建高内聚、低耦合的领域模型提供了完整的方法论支撑。
三、大厂领域驱动架构实战
1. 阿里电商商品中心案例
挑战:亿级SKU的复杂属性管理与搜索优化
• 问题核心:商品属性动态扩展(如服装类目的尺码、颜色)、多维度搜索性能瓶颈。 • 业务复杂度:SKU属性组合爆炸(如手机型号×颜色×存储容量)。
解决方案
-
限界上下文拆分: • 商品核心域:管理基础商品信息、类目属性、SKU生成规则。 • 供应链支撑域:处理库存管理、供应商协同,通过防腐层隔离ERP系统。
// 商品核心域聚合根:ProductAggregate public class ProductAggregate { private String productId; private Map<String, Object> dynamicAttributes; // 动态属性存储 public void addAttribute(String key, Object value) { dynamicAttributes.put(key, value); } }
-
领域事件驱动状态同步: • Binlog监听:通过Canal捕获MySQL变更,发布商品更新事件。 • Elasticsearch同步:消费事件更新搜索索引,实现近实时搜索(1秒内延迟)。
# Canal客户端监听Binlog client = CanalClient(host='mysql-master') client.subscribe("mall.product") for change in client.listen(): emit_event(ProductUpdatedEvent(data=change.row_data))
2. 腾讯金融支付清结算系统
挑战:多币种混合结算与审计合规
• 精度问题:多币种汇率转换导致的小数位丢失(如0.1 USD = 0.78 HKD)。 • 审计追踪:需记录每一笔结算的完整轨迹以满足PCI-DSS标准。
解决方案
-
值对象模式实现货币计算:
@ValueObject public class Money { private final BigDecimal amount; private final Currency currency; public Money add(Money other) { BigDecimal converted = exchange(other); // 调用汇率服务 return new Money(this.amount.add(converted), this.currency); } }
-
Saga模式保障事务一致性: • Seata分布式事务:将结算拆分为“预扣款→汇率转换→最终结算”三个阶段。 • 补偿事务:若某阶段失败,自动触发反向操作(如退款)。
@GlobalTransactional public void settle(Order order) { deductFunds(order); // 阶段1:扣款 convertCurrency(order); // 阶段2:汇率转换 finalSettle(order); // 阶段3:最终结算 }
3. 美团外卖订单履约系统
挑战:高峰每秒10万订单的并发控制与状态管理
• 并发冲突:同一骑手被多个订单分配,导致状态覆盖。 • 状态机复杂度:订单需经历“创建→支付→派单→配送→完成”等十多个状态迁移。
解决方案
-
混合锁策略: • Redis分布式锁:粗粒度锁保障派单阶段互斥。 • 数据库行锁:细粒度锁控制订单项更新。
public void assignRider(String orderId, String riderId) { String lockKey = "order_assign:" + orderId; if (redisLock.tryLock(lockKey, 3)) { try { Order order = orderRepo.selectForUpdate(orderId); // 行锁 order.assignRider(riderId); } finally { redisLock.unlock(lockKey); } } }
-
领域事件驱动状态机: • 状态迁移规则:通过事件触发状态变更,避免硬编码。
public class OrderStateMachine { @Transition(on = "PAYMENT_COMPLETED", from = "CREATED", to = "PAID") public void onPaymentComplete(OrderEvent event) { // 检查业务规则:如订单金额是否匹配 } }
四、DDD与现代化架构融合
1. 微服务架构下的DDD落地
限界上下文与服务边界映射
• 一上下文一服务:适用于团队独立、业务复杂度低的场景(如用户服务)。 • 一上下文多服务:当上下文内存在多个子域时(如订单服务拆分为订单创建、订单查询)。
API与领域模型协同设计
• RESTful资源映射:
@PostMapping("/orders/{id}/cancel") public ResponseEntity<Void> cancelOrder(@PathVariable String id) { orderAppService.cancel(id); // 调用领域服务 return ResponseEntity.ok().build(); }
• HATEOAS超媒体驱动:
{ "orderId": "123", "status": "PAID", "_links": { "cancel": { "href": "/orders/123/cancel", "method": "POST" } } }
2. 云原生与DDD协同演进
Sidecar模式实现防腐层
• Envoy WASM过滤:转换第三方协议(如SOAP→REST)。
# Envoy WASM配置 filters: - name: wasm config: vm_config: runtime: "envoy.wasm.runtime.v8" code: local: filename: "/etc/envoy/soap_to_rest.wasm"
Serverless领域函数
• AWS Lambda风控规则引擎:
def lambda_handler(event, context): risk_score = calculate_risk(event['user_id']) return {"risk_level": "HIGH" if risk_score > 80 else "LOW"}
3. 中台化架构的DDD适配
业务中台核心域抽象
• 用户中心:抽象认证、权限管理为通用领域服务。 • 商品中心:提供标准化的类目管理、SKU生成API。
数据中台实时数仓构建
• Flink处理领域事件:
DataStream<OrderEvent> stream = env.addSource(kafkaSource); stream.keyBy(event -> event.getUserId()) .window(TumblingEventTimeWindows.of(Time.hours(1))) .aggregate(new OrderCountAggregate());
五、工具链与效能提升
1. DDD全生命周期工具
设计工具
• Visual Paradigm建模:
classDiagram class Order { -String orderId -OrderStatus status +cancel() } Order --> OrderItem : contains
代码生成
• IDEA DDD插件:自动生成聚合根、仓储接口。
// 自动生成仓储接口 public interface OrderRepository extends Repository<Order, String> { Order findByOrderId(String orderId); }
BDD测试验证
• Cucumber场景定义:
Feature: Order Cancellation Scenario: User cancels an unpaid order Given an order with status "CREATED" When the user cancels the order Then the order status should be "CANCELLED"
2. 框架与中间件集成
DDD框架选型
• COLA架构:阿里开源的轻量级DDD框架,模块化清晰。
<!-- COLA组件依赖 --> <dependency> <groupId>com.alibaba.cola</groupId> <artifactId>cola-component-ddd</artifactId> <version>4.3.1</version> </dependency>
• Axon Framework:支持事件溯源和CQRS,适合复杂事件驱动系统。
领域事件总线集成
• Spring Cloud Stream + RocketMQ:
spring: cloud: stream: bindings: orderEvent-out: destination: order-events content-type: application/json rocketmq: binder: name-server: rocketmq-nameserver:9876
总结
本节通过大厂实战案例与现代化架构融合,展现了DDD在复杂业务场景下的生命力: • 阿里商品中心:通过限界上下文拆分与事件驱动,支撑亿级SKU管理。 • 腾讯支付系统:值对象与Saga模式保障金融级精度与事务一致性。 • 美团订单履约:混合锁策略与状态机设计应对高并发挑战。
未来方向: • 智能化工具链:AI辅助领域建模(如自动识别聚合根边界)。 • 云原生深化:Service Mesh与Serverless进一步降低防腐层实现成本。 • 实时化数据:Flink流处理与领域事件深度结合,驱动实时决策。
通过工具链与框架的持续演进,DDD将持续赋能企业构建高响应力、高可维护性的业务系统。
相关文章:
9.1.领域驱动设计
目录 一、领域驱动设计核心哲学 战略设计与战术设计的分野 • 战略设计:限界上下文(Bounded Context)与上下文映射(Context Mapping) • 战术设计:实体、值对象、聚合根、领域服务的构建原则 统一语言&am…...

DataHub:现代化元数据管理的核心平台与应用实践
一、DataHub平台概述 DataHub是由LinkedIn开源并持续维护的下一代元数据管理平台,它采用实时流式架构(基于Kafka)实现元数据的收集、处理和消费,为现代数据栈提供了端到端的元数据解决方案。作为数据治理的基础设施,D…...
【Python 正则表达式】
Python 正则表达式通过 re 模块实现模式匹配,是文本处理的核心工具。以下是系统化指南,包含语法详解和实战案例: 一、正则基础语法 1. 元字符速查表 符号含义示例匹配结果.任意字符(除换行符)r"a.c"“abc”…...

ubuntu服务器版启动卡在start job is running for wait for...to be Configured
目录 前言 一、原因分析 二、解决方法 总结 前言 当 Ubuntu 服务器启动时,系统会显示类似 “start job is running for wait for Network to be Configured” 或 “start job is running for wait for Plymouth Boot Screen Service” 等提示信息,并且…...
list简单模拟实现
成员变量迭代器(重点)ListIterator运算符重载begin、end 插入、删除inserterase头插、尾插、头删、尾删 operator->const_iterator拷贝构造operator析构函数完整代码 由于前面已经模拟实现了vector,所以这里关于一些函数实现就不会讲的过于…...

QT6 源(101)阅读与注释 QPlainTextEdit,其继承于QAbstractScrollArea,属性学习与测试
(1) (2) (3)属性学习与测试 : (4) (5) 谢谢...

Coze 实战教程 | 10 分钟打造你的AI 助手
> 文章中的 xxx 自行替换,文章被屏蔽了。 📱 想让你的xxx具备 AI 对话能力?本篇将手把手教你,如何用 Coze 平台快速构建一个能与用户自然交流、自动回复提问的 xxx助手,零代码、超高效! 📌…...
Spring Boot中Redis序列化配置详解
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 引言 在使用Spring Boot集成Redis时,序列化方式的选择直接影响数据存储的效率和系统兼容性。默认的JDK序列化存在可读性差、存储空间大等问题&am…...
【spring】spring源码系列之九:spring事务管理(上)
系列文章目录 前言 在开始spring事务管理的源码分析之前,我们先自己尝试简单实现一下事务管理,实现事务的传递 一、事务的使用 有了spring之后,事务的使用变得简单,但是封装得也更深,功能也更复杂,也更…...

牛客网 NC22167: 多组数据a+b
牛客网 NC22167: 多组数据ab 题目分析 这道题目来自牛客网(题号:NC22167),要求我们计算两个整数a和b的和。乍看简单,但有以下特殊点需要注意: 输入包含多组测试数据每组输入两个整数当两个整数都为0时表示…...

K8S Ingress、IngressController 快速开始
假设有如下三个节点的 K8S 集群: k8s31master 是控制节点 k8s31node1、k8s31node2 是工作节点 容器运行时是 containerd 一、理论介绍 1)什么是 Ingress 定义:Ingress 是 Kubernetes 中的一种资源对象,它定义了外部访问集群内…...
GitHub 趋势日报 (2025年05月14日)
本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1xming521/WeClone🚀从聊天记录创造数字分身的一站式解决方案&…...

快消零售AI转型:R²AIN SUITE如何破解效率困局
引言 快消零售行业正经历从“规模扩张”到“精益运营”的转型阵痛,消费者需求迭代加速、供应链复杂度攀升、人力成本持续走高,倒逼企业通过技术升级实现业务重塑[1]。RAIN SUITE以AI应用中台为核心,针对快消零售场景打造全链路提效方案&…...

电路中零极点的含义
模拟电路中的零极点设计非常重要,涉及到系统的稳定。零点是开环传输函数分子为0时对应的频率。极点就是开环传递函数分子为0时对应的频率。 零点表征电路中能量输出路径的抵消效应,当不同支路的信号大小相等、方向相反时,导致特定频率下响应…...

解读RTOS 第八篇 · 内核源码解读:以 FreeRTOS 为例
1. 引言 FreeRTOS 作为最流行的嵌入式实时操作系统之一,其内核源码简洁且功能完善。通过剖析其关键模块(任务管理、调度器、队列、内存管理和移植层),不仅能够更深入地理解 RTOS 的运行机制,还能掌握根据项目需求进行内核定制与优化的能力。本章将带你以 FreeRTOS 10.x 版…...

2025年长三角+山东省赛+ 认证杯二阶段资料助攻说明
长三角高校数模B题 完整论文代码已经在售后群 网盘链接 发布 长三角更新时间轴 5.15 23:00 B站发布 完整论文讲解视频 5.16 18:00 j降重说明 5.17 22:00 无水印版本可视化无水印代码 其余时间 写手老师 售后群在线答疑 山东省助攻C道 认证杯二阶段助攻C题 山东省认证杯…...
平滑过滤值策略
该策略是一种基于技术分析的交易策略,主要通过计算一系列指标来判断市场趋势,并根据这些指标生成交易信号。 策略概述 该策略的核心在于利用多个技术指标来分析市场动态,并据此制定交易决策。它结合了价格动量、波动性和趋势跟踪等多种因素,旨在提高交易的准确性和效率。…...
MATLAB安装全攻略:常见问题与解决方案
MATLAB安装常见问题与解决方案 一、系统兼容性验证 安装前需确认操作系统满足MATLAB版本要求: Windows 10版本1903及以上(64位)macOS Monterey 12.6及以上Ubuntu 22.04 LTS及以上 验证命令示例: # Linux系统验证 lsb_release…...
Apache HttpClient 5 用法-Java调用http服务
Apache HttpClient 5 核心用法详解 Apache HttpClient 5 是 Apache 基金会推出的新一代 HTTP 客户端库,相比 4.x 版本在性能、模块化和易用性上有显著提升。以下是其核心用法及最佳实践: 一、添加依赖 Maven 项目: <dependency><…...

鸿蒙电脑:五年铸剑开新篇,国产操作系统新引擎
出品 | 何玺 排版 | 叶媛 前不久,玺哥发布的《鸿蒙电脑,刺向垄断的利刃,将重塑全球PC市场格局》发布后,获得了读者朋友的积极反馈,不少都期望鸿蒙电脑早日发布。 如今,它真来了! 5月8日&…...
AI大模型:(二)2.5 人类对齐训练自己的模型
目录 1.人类对齐原理 1.1. 偏好学习(人类反馈,RLHF/DPO) 1.2. 奖励模型(AI的“打分老师”) 1.3. 价值观约束(如宪法AI) 2.如何人类对齐训练 2.1.对比学习(人类反馈 RLHF/DPO) 2.2.考试评分(奖励模型训练) 2.3.底线教育(安全防护) 2.4.持续优化(在线学习…...
算法图表总结:查找、排序与递归(含 Mermaid 图示)
算法图表总结:查找、排序与递归(含 Mermaid 图示) 分类标签:算法、数据结构、Mermaid、技术图表 关键词: 算法可视化、Mermaid 图表、数据结构、二分查找、快速排序、递归树 摘要: 本文通过 Mermaid 图表…...
【redis】jedis客户端的使用
Jedis是Redis官方推荐的Java客户端库,提供了对Redis数据库的全面支持,适用于单机、哨兵及集群模式。作为最老牌的Java Redis客户端,其API设计直观,与Redis命令高度对应,例如set、get等方法与原生命令一致,降…...

SQLMesh信号机制详解:如何精准控制模型评估时机
SQLMesh的信号机制为数据工程师提供了更精细的模型评估控制能力。本文深入解析信号机制的工作原理,通过简单和高级示例展示如何自定义信号,并提供实用的使用技巧和测试方法,帮助读者优化数据管道的调度效率。 一、为什么需要信号机制…...
TCP(传输控制协议)建立连接的过程
TCP(传输控制协议)建立连接的过程称为 三次握手(Three-Way Handshake)。这是为了确保通信双方能够可靠地建立连接,并同步初始序列号。以下是详细步骤: 三次握手过程(通俗比喻:打电话…...

通义千问-langchain使用构建(二)
目录 序言xinference应用构建构建过程简单概述成效 chatchat应用构建过程成效 总结 序言 在昨天的使用langchain的基础上。又尝试了构建智能问答应用。 使用langchain chatchat这个开源包,构建了一下智能问答系统。 前置项,是使用了一下xinference框架&…...

[IMX] 02.GPIO 寄存器
目录 手册对应章节 1.GPIO 复用(引脚功能选择)- IOMUXC_SW_MUX_CTL_PAD_xxx 2.GPIO 电气特性 - IOMUXC_SW_PAD_CTL_PAD_xxx 3.GPIO 数据与控制寄存器 3.1.数据 - DR 3.2.输入/输出选择 - GDIR 3.3.状态 - PSR 3.4.中断触发控制 - ICR 3.5.中断使…...

【电子通识】热敏纸的静态发色性能和动态发色性能测试方法
静态发色性能的测定 测定治具 测定静态发色曲线需要使用三个仪器,包括静态发色仪、秒表(分辨力为0.01 s)、反射光密度计(符合 GB/T23649)。 静态发色曲线使用的测试仪为静态发色仪。其结构如下图所示:包括了保湿压板、金属加热板、温度显示器、控制面板。温度能在50℃到…...
Nginx 返回 504 状态码表示 网关超时(Gateway Timeout)原因排查
Nginx 返回 504 状态码表示 网关超时(Gateway Timeout),这意味着 Nginx 作为反向代理服务器,在等待上游服务器(如后端应用服务器、数据库服务器等)响应时,超过了预设的时间限制,最终…...

AIbase推出全球MCP Server集合平台 收录超12万个MCP服务器客户端
2025年,AI领域迎来了一项重要的技术进展——MCP(Model Context Protocol,模型上下文协议)的广泛应用。全球MCP Server集合平台AIbase(https://mcp.aibase.cn/)应运而生,为AI开发者提供了一站式的MCP服务器和客户端整合…...