再次重构, 更通用(还未完成)

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