初步猜想:
在接触到框架文档的第一阶段时,会觉得控制器调用模型就是一件很简单的事,tp中用D方法或者M方法来实例化模型,laravel中用命名空间来加载模型,CI中用$this->load->model来加载模型,都很方便,对吗.
之前的文章中有提到过一个关于排期的逻辑思考,同样在最初的设计中想到要将所有可能用到的类都加载.两者类似的地方在于加载的类的数量是不确定的,只有当你的业务逻辑完全固定后才可能有一个确定的将要被加载的类的数量.
那么,curl的出现,是不是改变这一情况的一种方法呢?当然了,利用php的autoload也可以达到这种效果,这里只对curl进行猜想,curl在我的印象里是用来模仿客户端访问链接并得到返回值的函数.
观察:
直接访问模型中的方法获取到数据,这里还有一点要提到,公司项目是多个项目处于同一个框架中,模型并不是单独放在某一个项目得model文件夹中,而是放在最外层(与项目同级)的Service层中,用陈老师的话来说就是逻辑和表现分离.这个涉及到其他方面暂且不做延伸.
那么,首先略过逻辑和表现分层这个思想.
剩下就变成curl工具的使用.
四个步骤
1.初始化资源
$handle = curl_init();
2.设置参数,这是传说中最重要的一步,具体可参考手册http://php.net/manual/zh/function.curl-setopt.php
像是在项目中访问模型的话,不会直接把返回的数据输出到浏览器中,所以大概设置如下:
curl_setopt($handle, CURLOPT_URL, $uri);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1);
CURLOPT_URL设置的是需要获取数据的url地址,这个可以在curl_init()中作为参数传进去.
CURLOPT_RETURNTRANSFER设置为1,将数据以字符串的形式返回.
3.执行
$rs =curl_exec($handle);
4.关闭
curl_close($handle)
至此,获取数据的方法从实例化模型对象->执行方法变成了通过url直接访问模型的方法
分析:
一种是框架实例化模型,再进行模型的各种操作.
一种是直接访问url,通过curl来模拟并获取数据.
猜想:
通过curl工具来访问url不用加载模型,不用实例化(当然了除了本身),在一定程度上能够提高性能.
最关键的是不用手动加载不可预料的模型,要使用什么数据接口直接访问即可.
那么,单独使用Service层在逻辑与展现层的分离上有何作用呢....