大重构

Signed-off-by: TZ <atian25@qq.com>
另一种重构尝试

Signed-off-by: TZ <atian25@qq.com>
基本完成重构

Signed-off-by: TZ <atian25@qq.com>