重构：抽取可重用逻辑到views目录下