跳转至

代码质量优化报告

⚠️ **归档文档 — 数据已过时** 本报告为历史快照存档。当前版本 **v1.3.0-dev**,232 测试通过。 👉 最新工程状态请参阅 **[ENGINEERING_ALIGNMENT.md](ENGINEERING_ALIGNMENT.md)**

优化日期

2026-03-25

任务概述

对智能知识系统进行代码质量优化,包括消除通配符导入、完善类型注解、减少代码重复。


任务1: 消除通配符导入

结果

  • 状态: 已完成
  • 发现: 全项目未发现通配符导入 (from xxx import *)
  • 建议: 继续保持良好的导入实践

任务2: 完善类型注解

修改的文件

1. /home/ai/zhineng-knowledge-system/backend/common/typing.py (新建)

创建了统一的类型定义模块,提供以下类型别名: - JSONResponse - API响应类型 - DocumentRecord - 文档记录类型 - QueryResult - 查询结果类型 - HealthStatus - 健康检查结果类型 - 其他常用类型别名

2. 更新API文件的返回类型注解

文件 修改内容
backend/api/v1/documents.py 统一使用 JSONResponse 替代 Dict[str, Any]
backend/api/v1/search.py 统一使用 JSONResponse 替代 Dict[str, Any]
backend/api/v1/reasoning.py 统一使用 JSONResponse 替代 Dict[str, Any]
backend/api/v1/gateway.py 统一使用 JSONResponse 替代 Dict[str, Any]
backend/api/v1/health.py 已有完善类型注解,无需修改

任务3: 减少代码重复

创建的通用工具模块

1. /home/ai/zhineng-knowledge-system/backend/common/__init__.py

统一的工具模块导出

2. /home/ai/zhineng-knowledge-system/backend/common/db_helpers.py

数据库查询辅助函数模块,提供: - row_to_dict() - 将数据库行转换为字典 - rows_to_list() - 将多行转换为字典列表 - fetch_one_or_404() - 查询单条记录或返回404错误 - fetch_paginated() - 分页查询 - search_documents() - 通用文档搜索 - get_document_stats() - 获取文档统计 - check_database_health() - 检查数据库健康状态

3. /home/ai/zhineng-knowledge-system/backend/common/singleton.py

单例模式工具模块,提供: - @async_singleton 装饰器 - 异步单例模式 - SingletonFactory 类 - 灵活的单例工厂 - reset_all_singletons() - 重置所有单例(用于测试)

4. /home/ai/zhineng-knowledge-system/backend/domains/mixins.py

领域类混入模块,提供: - DatabaseSearchMixin - 数据库搜索功能 - QueryFormatterMixin - 查询结果格式化 - RelationMapMixin - 关联关系映射

重复代码消除统计

原有重复模式 出现次数 解决方案
dict(row) 数据库行转换 18+ 次 rows_to_list() 函数
await init_db_pool() 重复获取连接池 12 次 统一通过 db_helpers 使用
单例模式 (get_xxx函数) 8 次 @async_singleton 装饰器
404错误处理 4 次 fetch_one_or_404() 函数
领域搜索重复代码 3 个文件 DatabaseSearchMixin

重构的文件

  1. backend/api/v1/documents.py
  2. 使用 rows_to_list() 替代列表推导
  3. 使用 fetch_one_or_404() 替代手动404检查

  4. backend/api/v1/search.py

  5. 使用 search_documents() 简化搜索逻辑
  6. 使用 get_document_stats() 简化统计获取

  7. backend/api/v1/reasoning.py

  8. 使用 rows_to_list() 统一数据转换

  9. backend/api/v1/gateway.py

  10. 统一使用 JSONResponse 类型

  11. backend/domains/confucian.py

  12. 使用 DatabaseSearchMixinQueryFormatterMixin
  13. 减少约30行重复代码

代码质量改进

类型安全性

  • 统一的类型别名减少了拼写错误
  • 明确的返回类型提高IDE支持

可维护性

  • 通用工具函数集中管理
  • 减少重复代码降低维护成本

可测试性

  • 单例模式工具支持测试重置
  • 辅助函数易于单元测试

建议后续工作

  1. 逐步应用mixin到其他领域文件
  2. backend/domains/qigong.py
  3. backend/domains/tcm.py

  4. 添加单元测试

  5. 为新的 common 模块添加测试
  6. 验证重构后功能正确性

  7. 考虑使用依赖注入

  8. 将数据库连接池通过依赖注入传递
  9. 减少全局状态使用

验证结果

所有修改后的文件均已通过Python语法检查:

python3 -m py_compile backend/common/*.py
python3 -m py_compile backend/api/v1/*.py
python3 -m py_compile backend/domains/*.py