重构一些功能