抽取 practice_record 相关代码到 module
重构 practice_record