重构整个代码，方便第三方能够接入进来