代码质量优化报告
优化日期
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 |
重构的文件
- backend/api/v1/documents.py
- 使用
rows_to_list()替代列表推导 -
使用
fetch_one_or_404()替代手动404检查 -
backend/api/v1/search.py
- 使用
search_documents()简化搜索逻辑 -
使用
get_document_stats()简化统计获取 -
backend/api/v1/reasoning.py
-
使用
rows_to_list()统一数据转换 -
backend/api/v1/gateway.py
-
统一使用
JSONResponse类型 -
backend/domains/confucian.py
- 使用
DatabaseSearchMixin和QueryFormatterMixin - 减少约30行重复代码
代码质量改进
类型安全性
- 统一的类型别名减少了拼写错误
- 明确的返回类型提高IDE支持
可维护性
- 通用工具函数集中管理
- 减少重复代码降低维护成本
可测试性
- 单例模式工具支持测试重置
- 辅助函数易于单元测试
建议后续工作
- 逐步应用mixin到其他领域文件
backend/domains/qigong.py-
backend/domains/tcm.py -
添加单元测试
- 为新的
common模块添加测试 -
验证重构后功能正确性
-
考虑使用依赖注入
- 将数据库连接池通过依赖注入传递
- 减少全局状态使用
验证结果
所有修改后的文件均已通过Python语法检查: