根据需要重构版本