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

11 KiB
Raw Permalink Blame History

前后端项目 - 可执行改造清单

🎯 改造优先级分类

P0 - 紧急(影响稳定性/核心功能)

P1 - 重要(影响维护性/扩展性)

P2 - 一般(性能优化/用户体验)


📁 前端项目改造清单

P0 - 紧急改造

🔴 P0-1: 统一LogicFlow依赖版本

风险: 双命名空间版本并存可能导致冲突 文件: package.json 操作:

# 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/
操作:

// 创建: 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/ 操作:

# 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/ 操作:

# 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/ 操作:

// 创建: 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/ 操作:

// 创建: 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 操作:

// 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层 操作:

// 创建: 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 操作:

# 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 操作:

@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/ 操作:

// 添加依赖
<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 操作:

<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) 操作:

// 需优化的示例
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 操作:

<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 操作:

# .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周根据团队规模调整