seperate the behavior from client : client input , request handle