30 lines
1.6 KiB
Markdown
30 lines
1.6 KiB
Markdown
|
|
---
|
||
|
|
kind: design
|
||
|
|
name: 按功能边界拆分 model/index.vue 为子组件与 composable
|
||
|
|
source: session
|
||
|
|
category: adr
|
||
|
|
---
|
||
|
|
|
||
|
|
# 按功能边界拆分 model/index.vue 为子组件与 composable
|
||
|
|
|
||
|
|
_来源:e2577ff → b4926ba 提交周期内记录的编码计划——内容为规划时意图,实现可能滞后或有出入。_
|
||
|
|
|
||
|
|
**状态:** accepted
|
||
|
|
|
||
|
|
## 背景
|
||
|
|
frontend/src/views/model/index.vue 文件膨胀至 1824 行,同时承载搜索列表、5 个对话框、大量状态管理与样式,导致可读性与可维护性下降。
|
||
|
|
|
||
|
|
## 决策驱动
|
||
|
|
- 单文件过大难以维护
|
||
|
|
- 各对话框逻辑耦合在页面中
|
||
|
|
- 列表/搜索/分页等通用逻辑需要复用
|
||
|
|
|
||
|
|
## 备选方案
|
||
|
|
- **保持 monolithic index.vue** _(已否决)_ — 优点:改动最小;缺点:文件持续膨胀,新需求只能继续往里堆代码
|
||
|
|
- **拆分为 components + composables 目录结构** — 优点:每个对话框独立成组件;useModelList.js 抽取列表/搜索/分页/排序/复制等共享逻辑;index.vue 仅保留编排职责(~250 行);缺点:引入更多文件,需维护 props/emits 契约
|
||
|
|
|
||
|
|
## 决策
|
||
|
|
将 model/index.vue 按功能边界拆分为:components/ModelFormDialog.vue、EqCacheDialog.vue、PushProgressDialog.vue、CsvViewerDialog.vue、PushViewDialog.vue 五个对话框组件,以及 composables/useModelList.js 提取列表核心逻辑;index.vue 仅保留搜索表单+表格+分页模板与操作按钮的编排逻辑。
|
||
|
|
|
||
|
|
## 影响
|
||
|
|
每个对话框可独立演进与测试,useModelList.js 可在其他页面复用列表能力;代价是新增跨组件通信需通过 props/emits/ref,且目录层级加深。
|