[feature] make code arch better