拆分模块，加入单元测试