重构handler