-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Description
[Quality] YAGNI 原则: 发现多处过度设计和未使用代码
实际问题汇总
通过代码审查发现,项目中存在大量 YAGNI (You Aren't Gonna Need It) violations - 即实现了未来可能需要但当前并未使用的功能,导致:
- 代码维护负担增加
- 测试覆盖困难
- 新开发者理解成本上升
- 潜在的依赖膨胀
问题 1: hyper_polar.py - 948行代码中80%为占位符
文件: pymultiwfn/analysis/properties/hyper_polar.py
行数: 948 行
问题: 仅有1个核心方法实现,其余为TODO占位符
实际代码问题:
# 第 201-219 行: 未实现的方法
# TODO: Implement finite field polarizability calculation
# This would involve calculating dipole moments under different
# electric field perturbations and taking numerical derivatives
# 第 375 行
def _calculate_first_hyperpolarizability(self, ...):
# TODO: Implement first hyperpolarizability calculation
return beta # 返回空零矩阵
# 第 399 行
def _calculate_second_hyperpolarizability(self, ...):
# TODO: Implement second hyperpolarizability calculation
return gamma # 返回空零矩阵
# 第 866 行
def calculate_sos_hyperpolarizability(self, ...):
# TODO: Implement SOS first hyperpolarizability calculation
# 第 873 行
def calculate_sos_hyperpolarizability(self, ...):
# TODO: Implement SOS second hyperpolarizability calculation改进建议:
- 删除此文件或将其移至
experimental/目录 - 仅保留
parse_gaussian_polarizability()方法(唯一实现的方法) - 当实际需要时再从Git历史恢复
文件引用次数: 仅在自身文件中被引用(测试代码)
问题 2: GUI模块 - 661行PyQt5代码完全未使用
文件: pymultiwfn/vis/gui/main_gui.py
行数: 661 行
问题: 完整的GUI实现,但从未在项目中启动或使用
实际代码问题:
# 第 644-661 行: main() 函数从未被调用
def main():
"""Main entry point for GUI application"""
app = QApplication(sys.argv)
# ... 完整GUI实现
window = MultiwfnGUI()
window.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()使用情况检查:
$ grep -r "MultiwfnGUI\|main_gui" --include="*.py" pymultiwfn/ | grep -v "^pymultiwfn/vis/"
# 无任何输出 - GUI完全未被使用改进建议:
- 移至单独的
pymultiwfn-gui包中 - 或添加
[gui]extras_require 使其成为可选依赖 - 当前强制依赖 PyQt5 增加了安装负担
问题 3: weak_interaction.py - 664行仅在vis模块内使用
文件: pymultiwfn/vis/weak_interaction.py
行数: 664 行
问题: 复杂的弱相互作用分析,但仅在GUI中引用,未集成到主功能
使用情况:
- 仅在
pymultiwfn/vis/__init__.py和pymultiwfn/vis/gui/main_gui.py中导入 - 从未在核心分析流程中使用
改进建议:
- 与GUI一同移至 experimental 分支
- 或标记为
@experimental装饰器
问题 4: 空文件和占位符解析器
文件 4.1: pymultiwfn/io/parsers/qeparser.py (17行)
class QEParser:
def load(self) -> Wavefunction:
# TODO: Implement Quantum ESPRESSO input parsing
raise NotImplementedError("Quantum ESPRESSO parser not yet implemented")文件 4.2: pymultiwfn/utils/edflib_utils.py (1行)
# TODO: Implement functionality from edflib.f90文件 4.3: pymultiwfn/analysis/properties/__init__.py (1行)
# TODO: Implement functionality for properties analysis改进建议:
- 删除这些空文件
- 当实际实现时再添加
- 避免给用户"功能已存在"的错误印象
问题 5: VASP解析器 - 75%未实现
文件: pymultiwfn/io/parsers/vasp.py (76行)
问题: 4个类中仅1个有基本实现
实际代码问题:
class CHGCARLoader(VASPParser):
def _parse(self) -> Wavefunction:
# TODO: Implement CHGCAR parsing for charge density
raise NotImplementedError("CHGCAR parser not yet implemented")
class VASPGridLoader(VASPParser):
def _parse(self) -> Wavefunction:
# TODO: Implement VASP grid file parsing
raise NotImplementedError("VASP grid parser not yet implemented")改进建议:
- 删除未实现的类,仅保留
POSCARLoader - 或移至
parsers/experimental/vasp.py
统计汇总
| 文件/模块 | 行数 | 问题类型 | 建议操作 |
|---|---|---|---|
| hyper_polar.py | 948 | 80%为TODO占位符 | 删除或移至experimental |
| vis/gui/main_gui.py | 661 | 完全未使用 | 移至独立包 |
| vis/weak_interaction.py | 664 | 仅在vis内使用 | 移至experimental |
| io/parsers/qeparser.py | 17 | 完全未实现 | 删除 |
| utils/edflib_utils.py | 1 | 完全为空 | 删除 |
| io/parsers/vasp.py | 76 | 75%未实现 | 精简或移除 |
| 总计 | ~2367行 | 死代码/占位符 | 清理 |
为什么重要
- 维护成本: 每次重构都需要考虑这些未使用代码
- 测试负担: 这些代码难以测试(许多抛出NotImplementedError)
- 依赖膨胀: GUI强制依赖PyQt5,即使命令行用户也需要安装
- 认知负荷: 新开发者需要理解哪些功能是真正可用的
- CI时间: 不必要的文件增加了静态分析和类型检查时间
建议实施计划
Phase 1: 立即删除(低风险)
utils/edflib_utils.pyanalysis/properties/__init__.py(空文件)io/parsers/qeparser.py
Phase 2: 移至experimental分支(中风险)
analysis/properties/hyper_polar.pyvis/gui/整个目录vis/weak_interaction.py
Phase 3: 精简(低风险)
io/parsers/vasp.py- 仅保留POSCARLoader
优先级
- 高 - 影响系统稳定性/安全性
- 中 - 影响代码质量
- 低 - 改进建议
此问题属于高优先级,因为未使用的GUI代码强制引入PyQt5依赖,可能在某些环境中造成安装问题。
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels