重构了update代码