feat: 简化文字
This commit is contained in:
@@ -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知识库>
|
||||||
|
|||||||
Reference in New Issue
Block a user