重新设计了架构，并增加了错误定义模块