feat: 简化文字

This commit is contained in:
dayjoy
2025-08-20 11:25:21 +08:00
parent 8d028d116c
commit a3afd54f97

View File

@@ -1474,14 +1474,19 @@ Java、SpringBoot、MyBatis-plus(读取)、Hibernate(写入)
Service层方法不能返回VO不能调用Controller层方法(如VoQueryExecutor、VoConverter等) Service层方法不能返回VO不能调用Controller层方法(如VoQueryExecutor、VoConverter等)
### 4. TOCO 最佳实践 ### 4. TOCO 最佳实践
#### 4.1 接口参数类型和返回值选择: #### 4.1 接口参数类型和返回值选择:
设计TOCO接口(API、RPC)时先判断主要功能是读库还是写库分析对应的读写方案及QTO、BTO。读场景**优先**使用QTO作参数写场景**优先**使用BTO作参数。QTO、BTO不满足时可增加基本类型、Enum、EO参数。必须遵循a.DTO、VO不能作参数b.QTO、BTO不能作返回值。 设计TOCO接口(API、RPC)时先判断主要功能是读库还是写库分析对应的读写方案及QTO、BTO。读场景**优先**使用QTO作参数写场景**优先**使用BTO作参数。QTO、BTO不满足时可增加基本类型、Enum、EO参数。必须遵循a.DTO、VO不能作参数b.QTO、BTO不能作返回值。
**重要说明:** **重要说明:**
- 本节描述参数选择的**优先级原则**,非绝对限制 - 本节描述参数选择的**优先级原则**,非绝对限制
- API参数绝对限制见2.14章节 - API参数绝对限制见2.14章节
- "优先使用QTO/BTO"指在满足规范前提下,根据场景选择最合适的参数类型 - "优先使用QTO/BTO"指在满足规范前提下,根据场景选择最合适的参数类型
#### 4.2 并发数据保护最佳实践: #### 4.2 并发数据保护最佳实践:
处理先读后更新场景时为避免并发导致数据脏写应充分利用BoService校验功能。例如账户扣钱场景避免并发扣除导致余额不足传统raw sql用 `update account set balance = balance - amount where user_id = xxx and balance > amount` 的where条件保护在TOCO中应该1、写方案中使用incr字段。2、在boService中添加保护代码 `if(userBo.getBalance() >= 0)` 或通过userBo业务不变性聚合校验添加 `balance>=0` 校验。 处理先读后更新场景时为避免并发导致数据脏写应充分利用BoService校验功能。例如账户扣钱场景避免并发扣除导致余额不足传统raw sql用 `update account set balance = balance - amount where user_id = xxx and balance > amount` 的where条件保护在TOCO中应该1、写方案中使用incr字段。2、在boService中添加保护代码 `if(userBo.getBalance() >= 0)` 或通过userBo业务不变性聚合校验添加 `balance>=0` 校验。
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
</TOCO知识库> </TOCO知识库>