梳理了一下代码结构