1.自己写写的第一个接口,用于一个PC官网 代理商查询接口。 ``` Public function verify() { //获取提交数据 $str = $this->request->get('str'); If(empty($str)) { //没有输入内容,返回错误信息 return $this->error('请输入信息'); } //到数据库中查询是否有这个验证码 $model = Db::name('agent')->where('name', '=', $str)->find(); If(empty($model)) { //验证码不存在,反馈错误信息 return $this->error('无代理商信息'); } //反馈正常信息,并反馈之前查询的历史记录 return $this->success('查询的信息是正确的'); } ``` 2.一天网站增加了手机端(没有用自适应,完全独立的域名,也没有用跨站请求),所以把上面的,验证接口代码,复制粘贴了一份出来。 ![](https://img.kancloud.cn/66/e7/66e7efdd714ab519f5b71d774477537a.png) ![](https://img.kancloud.cn/78/ff/78ff3051d8e590be0c80d62f2dc5bdac_1522x781.png) 3.查询的规则发生了好几次变化 , 姓名查询-->手机号码查询 -->手机 +身份证号码 --> 手机 +身份证号码 + 姓名查询。那么,每次调整,都要修改两次。 ![](https://img.kancloud.cn/60/ae/60aeee2079c7a09dea5e27964b440bc5_982x416.png) 4.虽然一个需求调整两个地方,也问题不大,但是总感觉怪怪的。要是有5个地方都使用同样的代码,那不是要修改5次?还是得调整程序 ``` <pre class="calibre7">``` //接口代码 Public function verify() { //获取提交数据 $str = $this->request->get('str'); try{ AgentLogic::verify($str); return $this->success('查询的信息是正确的'); }catch (\Exception $e) { //捕捉到 throw new \Exception 后,返回相应的错误信息 return $this->error($e->getMessage()); } } //定义的代理类 class AgentLogic { public static function verify($str) { If(empty($str)) { //没有输入内容,返回错误信息 throw new \Exception('请输入信息'); } //到数据库中查询是否有这个验证码 $model = Db::name('agent')->where('name', '=', $str)->find(); If(empty($model)) { //验证码不存在,反馈错误信息 throw new \Exception('无代理商信息'); } return true; } } ``` 5。后面有业务调整的时候,只需要调整AgentLogic 这一个地方就可以了。这样一试,用对象把代码封闭志来,可以减少业务逻辑调整,对项目的影响 ![](https://img.kancloud.cn/03/87/03879f37bd3fae622dac5bb88f352cdd_717x471.png)