重构完成，编译测试通过