重构高级模型，并添加单元测试 fix #103