重構 template