调整回写client的逻辑位置，放到框架内部