优化
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# Firstleg 内部模块化基线与首切片方案
|
||||
# Firstleg 内部模块化基线与切片实施记录
|
||||
|
||||
## 1. 范围与生成方式
|
||||
|
||||
@@ -198,3 +198,53 @@ mvn -pl firstleg -am -Dtest=CustomerTransitStatisticsServiceTest,CustomerTransit
|
||||
- 根 Mapper 扫描只把旧精确包替换为新精确包,没有扩大扫描范围或增加兼容 Bean。
|
||||
- 验证结果:Node 合同 3/3;`test-compile` 成功;客户统计加根扫描定向测试 7/7;`mvn -pl firstleg -am test` 共 854 个测试,0 失败、0 错误、3 跳过,构建成功。
|
||||
- 首次并发执行 `test-compile` 时,其他专项同时写入共享 `target/classes` 导致若干无关 class 文件瞬时缺失;源符号核对正常,独立重跑 `test-compile` 与完整测试均成功。
|
||||
|
||||
## 12. 第二切片:价格簿只读查询
|
||||
|
||||
### 12.1 选择证据
|
||||
|
||||
第二切片选择 `pricebook-query`,而没有选择报关、拖车、出仓或船节点:
|
||||
|
||||
- 原实现只有 `PriceBookQueryRows`、`PriceBookQueryRepository`、`PriceBookQueryMapper` 三个核心文件,全部为只读查询,不承载 Controller、权限或状态机。
|
||||
- `PriceBookQueryMapper -> repository.PriceBookQueryRows` 是主源码唯一 `mapper -> repository` 反向依赖,也是物理包 SCC `mapper <-> repository` 的唯一成因。
|
||||
- 报关和拖车均涉及 MultipartFile、Feign、装柜或出仓门禁;出仓和船节点属于当前业务热点,风险高于只读价格簿查询。
|
||||
- 本切片不触碰 `LoadingPickService`、客户尺寸初始化、IAM 解环、POM、CI、AGENTS、SQL 或部署配置。
|
||||
|
||||
### 12.2 目标结构与依赖方向
|
||||
|
||||
```text
|
||||
pricebookquery/
|
||||
application/
|
||||
PriceBookQueryService.java
|
||||
model/PriceBookQueryRows.java
|
||||
port/in/PriceBookQueryUseCase.java
|
||||
port/out/PriceBookQueryReader.java
|
||||
adapter/out/persistence/
|
||||
PriceBookQueryMapper.java
|
||||
```
|
||||
|
||||
依赖由“多个业务 Service -> 全局 Repository -> 全局 Mapper -> Repository Rows”改为:
|
||||
|
||||
```text
|
||||
业务消费者 -> PriceBookQueryUseCase
|
||||
PriceBookQueryService -> PriceBookQueryReader
|
||||
PriceBookQueryMapper -> PriceBookQueryReader + PriceBookQueryRows
|
||||
```
|
||||
|
||||
消费者只能访问 In Port 和只读模型;application 不依赖 Spring MVC、MyBatis、MyBatis-Plus 或其他 Firstleg 切片。Mapper 的七段 `@Select` SQL 文本和方法参数保持不变。
|
||||
|
||||
### 12.3 依赖图变化
|
||||
|
||||
- 主源码由 430 类/949 条内部依赖/67 包变为 432 类/953 条内部依赖/72 包;新增项为 In Port、Out Port 和 Application Service,原 Repository 被删除。
|
||||
- 物理包多节点 SCC 从 1 个降为 0 个。
|
||||
- `pricebook-query` 是零出向边的叶子,不进入逻辑 SCC;显式入向仅为订舱、测量计价、分柜装柜三个消费者切片。
|
||||
- 原 `split-loading -> measurement-pricing` 两条价格簿引用被替换为显式 `split-loading -> pricebook-query`;Node 合同没有简单放宽旧边。
|
||||
- 既有 88 条跨切片 Entity/DTO 泄漏和 31 条 Mapper 泄漏均未增加。
|
||||
|
||||
### 12.4 棘轮与回滚边界
|
||||
|
||||
- Node 合同锁定五个目标类位置、application 依赖禁令、零出向/三类入向和消费者只能访问 In Port/模型,并断言物理包 SCC 为空。
|
||||
- `PriceBookQueryArchitectureTest` 用 ArchUnit 执行同等边界,持久化 Mapper 必须实现 Out Port。
|
||||
- 回滚仅恢复原三文件及消费者类型引用;不涉及 URI、权限、JSON、SQL、表结构、业务状态或环境配置。
|
||||
- 只读模型仍保留原 Lombok 可变 Bean 形态以维持 MyBatis 映射行为;本轮不顺带改造成不可变领域对象。
|
||||
- 验证结果:七段 `@Select` SQL 文本逐块完全一致;Node 合同 5/5;`test-compile` 成功;价格簿、ArchUnit、根扫描及三个消费者切片定向测试 78/78;Firstleg 聚合全量 878 个测试,0 失败、0 错误、3 跳过,构建成功。
|
||||
|
||||
Reference in New Issue
Block a user