Files
workspace/refactor-action-plan.md
aitest 4f01dc7762 Add comprehensive refactor action plan for frontend and backend projects
- P0 (Critical): Dependency unification, adapter layer, idempotency, version control
- P1 (Important): Legacy cleanup, caching, distributed transactions, pagination优化
- P2 (General): API documentation, performance monitoring, logging optimization

Includes:
- Detailed action plans with file paths and commands
- Priority-based refactor roadmap
- Implementation schedule (3-5 weeks)
- Risk control guidelines
2026-03-05 14:23:40 +09:00

477 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 前后端项目 - 可执行改造清单
## 🎯 改造优先级分类
### P0 - 紧急(影响稳定性/核心功能)
### P1 - 重要(影响维护性/扩展性)
### P2 - 一般(性能优化/用户体验)
---
## 📁 前端项目改造清单
### P0 - 紧急改造
#### 🔴 P0-1: 统一LogicFlow依赖版本
**风险**: 双命名空间版本并存可能导致冲突
**文件**: `package.json`
**操作**:
```bash
# 1. 分析当前LogicFlow依赖
npm list @logicflow/core @logicflow/extension
npm list @helinda-test-logicflow/core @helinda-test-logicflow/extension
# 2. 确定保留版本(建议:官方版本)
# - 保留: @logicflow/core, @logicflow/extension
# - 移除: @helinda-test-logicflow/*
# 3. 更新package.json移除@helinda-test-logicflow依赖
# 4. 安装官方版本
npm install @logicflow/core@latest @logicflow/extension@latest
# 5. 更新所有import语句
find src -name "*.ts" -o -name "*.vue" | xargs sed -i 's/@helinda-test-logicflow/@logicflow/g'
```
**原因**: 降低版本冲突风险,便于后续升级
---
#### 🔴 P0-2: 添加自定义Node/Edge适配层
**风险**: LogicFlow主版本升级可能破坏自定义组件
**文件**: `src/views/plan-simulation-modeling/`
**操作**:
```typescript
// 创建: src/views/plan-simulation-modeling/logicflow-adapter.ts
export interface LogicFlowComponent {
type: 'node' | 'edge';
id: string;
properties: Record<string, any>;
}
export class LogicFlowAdapter {
// 包装所有自定义Node/Edge
static wrapNode(nodeType: string, config: any): LogicFlowComponent {
return {
type: 'node',
id: `custom-${nodeType}`,
properties: this.normalizeProperties(nodeType, config)
};
}
static normalizeProperties(type: string, config: any): Record<string, any> {
// 版本兼容性处理
return {
...config,
_version: '1.0',
_type: type
};
}
}
```
**替换**:
- `src/views/plan-simulation-modeling/components/Diagram.vue`
- 所有自定义node组件
**效果**: 解耦LogicFlow版本升级影响
---
### P1 - 重要改造
#### 🟡 P1-1: 清理an-old-version目录
**风险**: 新旧逻辑混用导致维护困难
**文件**: `src/views/plan-simulation-modeling/an-old-version/`
**操作**:
```bash
# 1. 确认old版本不再使用
grep -r "an-old-version" src/ --exclude-dir=node_modules
# 2. 如果无引用,直接删除
rm -rf src/views/plan-simulation-modeling/an-old-version/
# 3. 更新路由(如果有)
# 移除 router/index.js 中的old-version路由
```
**原因**: 避免新旧逻辑交叉污染
---
#### 🟡 P1-2: 添加组件单元测试
**风险**: 修改Graph组件易引入bug
**文件**: `src/views/plan-simulation-modeling/components/`
**操作**:
```bash
# 1. 安装测试工具
npm install --save-dev vitest @vue/test-utils
# 2. 创建测试文件
touch src/views/plan-simulation-modeling/components/__tests__/Diagram.spec.ts
```
**测试覆盖**:
- 图形组件渲染
- 节点/edge拖拽
- 属性面板更新
---
#### 🟡 P1-3: 优化API响应数据结构
**风险**: 前端强依赖后端接口结构
**文件**: `src/api/`
**操作**:
```typescript
// 创建: src/api/adapters/
export class ServiceAdapter {
// 适配不同版本的API响应
static adaptSimProject(response: any): SimProject {
return {
id: response.id || response.projectId,
name: response.name || response.projectName,
// 统一字段映射
};
}
}
```
**效果**: 解耦前后端接口变更
---
### P2 - 一般改造
#### 🟢 P2-1: 提取公共业务逻辑hooks
**文件**: `src/views/plan-simulation-modeling/components/`
**操作**:
```typescript
// 创建: src/hooks/useGraphOperations.ts
export function useGraphOperations(graph: LogicflowInstance) {
const addNode = (nodeType: string, x: number, y: number) => {
// 统一节点添加逻辑
};
const deleteNode = (nodeId: string) => {
// 统一节点删除逻辑
};
return { addNode, deleteNode };
}
```
**效果**: 代码复用,减少重复逻辑
---
#### 🟢 P2-2: 优化构建配置
**文件**: `vite.config.ts`, `package.json`
**操作**:
```typescript
// vite.config.ts
export default defineConfig({
build: {
chunkSizeWarningLimit: 1000, // 分包大小限制
rollupOptions: {
output: {
manualChunks: {
'lodash-vendor': ['lodash-es'],
'logicflow': ['@logicflow/core', '@logicflow/extension']
}
}
}
}
});
```
**效果**: 提升首屏加载性能
---
## 📁 后端项目改造清单
### P0 - 紧急改造
#### 🔴 P0-1: 添加幂等性控制标识
**风险**: 重复提交导致数据不一致
**文件**: 所有Controller层
**操作**:
```java
// 创建: business-common/src/main/java/.../annotation/Idempotent.java
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Idempotent {
String keyPrefix() default "";
long timeout() default 10;
}
// 在关键接口添加,例如:
@Idempotent(keyPrefix = "sim:create", timeout = 30)
@PostMapping("/sim/create")
public Result createSimProject(@RequestBody SimProjectDTO dto) {
// 业务逻辑
}
```
**影响文件**:
- `business-core/main/java/.../sim/controller/SimProjectController.java`
- `business-core/main/java/.../sim/controller/SimController.java`
---
#### 🔴 P0-2: 添加API版本控制
**风险**: API变更导致前端客户端兼容性问题
**文件**: `application/src/main/resources/application.yml`
**操作**:
```yaml
# application.yml
spring:
mvc:
pathmatch:
matching-strategy: ant-path-matcher
# 新建: config-web/pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
```
**URL版本化**:
- `/v1/api/sim/project` → 现有
- `/v2/api/sim/project` → 新版本
---
#### 🔴 P0-3: 完善异常统一处理
**风险**: 异常信息泄露或格式不统一
**文件**: `business-common/.../exception/GlobalExceptionHandler.java`
**操作**:
```java
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public Result handleGeneralException(Exception e) {
log.error("系统异常", e);
return Result.error("系统繁忙,请稍后重试");
}
@ExceptionHandler(ValidationException.class)
public Result handleValidationException(ValidationException e) {
return Result.fail("参数校验失败: " + e.getMessage());
}
@ExceptionHandler(BadTimeOverlapException.class)
public Result handleBusinessException(BadTimeOverlapException e) {
return Result.error(e.getMessage());
}
}
```
---
### P1 - 重要改造
#### 🟡 P1-1: 添加缓存层Redis
**风险**: 高频查询导致数据库压力
**文件**: `business-support/src/main/java/.../simmodel/`
**操作**:
```java
// 添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
// 创建: business-support/src/main/java/.../cache/SimModelCache.java
@Service
public class SimModelCache {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
public SimModel getById(Long id) {
String key = "sim: модель:" + id;
SimModel model = (SimModel) redisTemplate.opsForValue().get(key);
if (model == null) {
model = simModelMapper.selectById(id);
redisTemplate.opsForValue().set(key, model, 30, TimeUnit.MINUTES);
}
return model;
}
}
```
**影响**: 所有频繁查询的Service层
---
#### 🟡 P1-2: 添加分布式事务控制
**风险**: 微服务间数据不一致
**文件**: `application/pom.xml`
**操作**:
```xml
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
<version>1.5.1</version>
</dependency>
```
**应用范围**: 跨服务业务操作
---
#### 🟡 P1-3: 优化MyBatis分页查询
**风险**: 大数据量查询性能问题
**文件**: `business-support/pom.xml` (已包含PageHelper)
**操作**:
```java
// 需优化的示例
public PageInfo<PhmmProductionResult> queryPhmmResult(PageRequest req) {
PageHelper.startPage(req.getPageNum(), req.getPageSize());
List<PhmmProductionResult> list = phmmProductionDao.selectList(req);
PageInfo<PhmmProductionResult> pageInfo = new PageInfo<>(list);
return pageInfo;
}
```
**SQL优化**: 添加索引、优化查询条件
---
### P2 - 一般改造
#### 🟢 P2-1: 添加API文档管理
**文件**: 所有Controller
**操作```java
// 在Controller上统一添加注解
@Api(tags = "仿真项目管理")
@ApiVersion("v1")
@RestController
@RequestMapping("/v1/api/sim")
public class SimProjectController {
@ApiOperation("创建仿真项目")
@PostMapping("/project")
public Result create(@RequestBody @Validated SimProjectDTO dto) {
// 业务逻辑
}
}
```
**访问**: http://localhost:8080/swagger-ui.html
---
#### 🟢 P2-2: 添加性能监控指标
**文件**: `application/pom.xml`
**操作**:
```java
// 添加Micrometer
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
// 自定义性能指标
@Component
public class SimPerformanceMetrics {
private final MeterRegistry registry;
public void recordSimulationDuration(long duration) {
registry.timer("simulation.duration")
.record(duration, TimeUnit.MILLISECONDS);
}
}
```
---
#### 🟢 P2-3: 优化日志结构
**文件**: `application/src/main/resources/logback-spring.xml`
**操作**:
```xml
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/application.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/application-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
```
---
## 🔧 开发环境配置改造
### P1 - 重要
#### 🟡 P1-4: 统一开发工具配置
**文件**: `.editorconfig`, `.prettierrc`
**操作**:
```ini
# .editorconfig
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.{ts,js,vue,java}]
indent_size = 2
[*.md]
trim_trailing_whitespace = false
```
---
## 🚀 实施计划建议
### 第一阶段1-2周
- P0-1: 统一LogicFlow依赖
- P0-2: 添加Node/Edge适配层
- P0-3: 添加幂等性控制
### 第二阶段2-3周
- P1-1: 清理old-version目录
- P1-2: 添加单元测试
- P1-3: 优化API响应结构
- P2-1: 提取公共hooks
### 第三阶段1-2周
- P1-4: 添加缓存层
- P1-5: 添加分布式事务
- P1-6: 优化MyBatis分页
### 第四阶段(按需)
- P2-2: 添加API文档
- P2-3: 添加性能监控
- P2-4: 优化日志结构
---
## ⚠️ 风险控制
1. **每个P0改造必须在测试环境验证**
2. **P1改造建议逐步迭代分批上线**
3. **P2改造可并行进行根据资源安排**
4. **所有改造都需要备份当前代码**
5. **改造前先建立基线测试**
---
**建议优先执行: P0-1 → P0-2 → P0-3**
**预计总工作量**: 3-5周根据团队规模调整