重构代码
重构代码，方便单元测试和阅读