Просмотр исходного кода

docs: 更新 MAD 计划进度快照(F2 主线 130→36)

5151561 3 месяцев назад
Родитель
Сommit
7fa82bed73
1 измененных файлов с 9 добавлено и 15 удалено
  1. 9 15
      docs/dev/mad-modernization-plan.md

+ 9 - 15
docs/dev/mad-modernization-plan.md

@@ -14,26 +14,20 @@
   - `legacyDaoInjectionBaseline` —— ViewModel 主线
   - `legacyUiDaoAccessBaseline` —— 非 ViewModel 的 UI 层文件(第二条线)
 - **F1 部分**:`app/lint-baseline.xml` 已建并接入 `lint {}`;`verifyConfigArchitecture` 已在 CI 传递触发;单测 **272 全绿**。
-- **F2 清零(已提交 5 批)**:关联导入 → RSS → 书籍导入 → 书源管理 → 换源+目录(提交 `77d38b8`…`04161fa`)。主线基线从 ~247 降到 **130**。
+- **F2 清零(已提交 13 批)**:关联导入 → RSS → 书籍导入 → 书源管理 → 换源+目录(`77d38b8`…`04161fa`);随后清完 8 个可清 VM(Web/BookInfoEdit/ChangeCover/TagGroupRule/SourceLogin/AudioPlay/ReadManga/BookInfo)+ `ReadBookViewModel` 非阅读态子集。**主线基线从 ~247 → 130 → 36**(仅剩 `ReadBookViewModel` 的 book/chapter 阅读态访问,留给 Track A)。
 - **数据层事务加固**:目录替换(`replaceChaptersAndUpdateBook`)、换序 move(`BookSourceDao.moveToTop/Bottom`)已改原子事务。
 
 ### 待续(新窗口从这里接)
 
-**① F2 主线还剩 130,集中在 9 个 VM**(按体量,`build.gradle.kts` 的 `legacyDaoInjectionBaseline`):
+**① F2 主线还剩 36,全部在 `ReadBookViewModel`**(`build.gradle.kts` 的 `legacyDaoInjectionBaseline`):
 
 | VM | 直连数 | 备注 |
 |---|---:|---|
-| `ReadBookViewModel` | 52 | **不要手工硬清**,与 Track A 交叠,见下 |
-| `BookInfoViewModel` | 34 | 书籍详情,纠缠较深 |
-| `ReadMangaViewModel` | 17 | 漫画阅读 |
-| `AudioPlayViewModel` | 11 | 音频播放 |
-| `SourceLoginViewModel` | 6 | |
-| `TagGroupRuleViewModel` | 4 | |
-| `ChangeCoverViewModel` | 3 | |
-| `BookInfoEditViewModel` | 2 | |
-| `WebViewModel` | 1 | 最轻,适合当热身 |
-
-> `ReadBookViewModel(52)` 里 book/chapter 类访问会被 Track A(`ReaderSession` 接管阅读状态)**溶解**,因此只清它与阅读状态无关的部分(httpTTS/bookSource),其余留给 Track A,别在 6484 行里硬拆。
+| `ReadBookViewModel` | 36 | 剩 24× `bookChapterDao` + 12× `bookDao`,**均为阅读态,不要手工硬清**,随 Track A 溶解 |
+
+> `ReadBookViewModel` 的 book/chapter 访问会被 Track A(`ReaderSession` 接管阅读状态)**溶解**,因此已在本轮清掉与阅读状态无关的部分(httpTTS/bookSource/bookmark 共 16 处,走 `HttpTtsRepository`/`BookSourceRepository`/`BookmarkRepository`),其余 36 处留给 Track A,别在 6400+ 行里硬拆。
+>
+> 清 8 个可清 VM 时给若干仓库补了无聊方法:`BookRepository`(`getAll`/`getLastReadBook`/`getChapter`/`delete`)、`BookSourceRepository`(`has`/`getAllTextEnabledPart`)、`SearchRepository`(`getEnableHasCover`/`getSearchBook`)、`BookGroupRepository`(`getIdsSum`/`getGroupNames`)、`HighlightTagRuleRepository`(`getEnabled`,并在 Koin 注册)、`HttpTtsRepository`(`getAll`/`getAllSync`/`getNameSync`/`delete`)。宿主 `by viewModels()` → Koin `by viewModel()` 已同步改(Web/BookInfoEdit/ChangeCover/SourceLogin/AudioPlay)。
 
 **② F2 第二条线(非 VM UI 层)**:`legacyUiDaoAccessBaseline` 已冻结 **26 文件 / 62 处**,**只冻不修**。等主线清完、仓库齐备、部分 Activity 随 Compose 迁移消失后再回头清(大头 `BookSourceActivity=10`、`RssJsExtensions=8`、`KeyboardAssistsConfig=7`)。
 
@@ -67,7 +61,7 @@
 | `upContentAwait` 是 `suspend`,模型反向等待视图 | `model/ReadBook.kt`(CallBack 定义内) |
 | VM 是 `CallBack` 唯一实现者 | 全仓仅 `ReadBookViewModel` 声明 `: ReadBook.CallBack` |
 | Effect 通道带订阅握手 | `_effects.subscriptionCount.first { it > 0 }`(`ReadBookViewModel.kt:210-223`) |
-| UI→DAO 直连是系统性模式 | 计划撰写时约 33 个 VM 构造注入 DAO;**现已冻结并清零 5 批,主线余 130**(见进度快照) |
+| UI→DAO 直连是系统性模式 | 计划撰写时约 33 个 VM 构造注入 DAO;**现已冻结并清零 8 个可清 VM + ReadBook 非阅读态子集,主线余 36**(全在 ReadBookViewModel,均阅读态,留给 Track A;见进度快照) |
 | CI 门禁 | lint 基线与架构护栏已就位;**仍缺显式 CI test/lint job**(见进度快照 ③) |
 | 已有架构护栏 + 基线机制 | `VerifyConfigArchitectureTask` + 三条基线(`legacyPreferenceCallBaseline` / `legacyDaoInjectionBaseline` / `legacyUiDaoAccessBaseline`),已 `dependsOn` assemble/compile |
 
@@ -129,7 +123,7 @@ Track C  声明式渲染 / Compose —— 长期,依赖 A、B 的产出
 系统性问题。按功能逐批,不预造大仓库。
 
 **冻结已落地** ✅:`VerifyConfigArchitectureTask` 里实际统计 `daoImport + appDbDaoAccess` 两种形式,双向棘轮 + 陈旧检测,覆盖两条线:
-- `legacyDaoInjectionBaseline` —— `ui/**` 里**含 `ViewModel`** 的文件(主线,当前 **130**)
+- `legacyDaoInjectionBaseline` —— `ui/**` 里**含 `ViewModel`** 的文件(主线,当前 **36**,全在 `ReadBookViewModel`)
 - `legacyUiDaoAccessBaseline` —— `ui/**` 里**非 `ViewModel`** 的文件(第二线,当前 **26 文件 / 62 处**,只冻不修)
 
 > 第二条线是后加的:清 VM 时发现护栏只看 `*ViewModel*`,而 `BookSourceActivity` 这类兄弟文件里还有直连 DAO。故把范围扩到整个 `ui/**`、给非 VM 文件建了第二基线,防止"清了半个 UI 层还以为清干净了"。