laravel

===================================================================

Mysql or Collection to sort data

据说是数据库更快, 因为数据库更优化, 可以利用什么算法, 什么索引,如果是 php,

少量数据, 还是可以的, 但如果数据大的话, 会达到内存限制

===================================================================

model -> model builder -> query builder ->  

===================================================================

===================================================================

 ===================================================================

===================================================================

===================================================================

===================================================================

===================================================================

===================================================================

===================================================================

 

1,  index.php
2, 生成service container
3,  service provider register/booted
4, dispatch routing
5, middleware
6, controller
7, database
--
20200617: index.php -> service container -> provider register - boot -> routing -> controller -> model
----
太不可思议了,
一个apiGuzzle的功能, 用到了3个类, 也就是3个方法, Laravel弄的太夸张了, 3个方法有必要放到3个文件吗?
一开始肯定整不透的, 还不如把这一个功能放到一个文件里, 还方便查看, 现在....

AcApiProvider 里面调用 ApiClientManager::getClient ,然后生成一个Guzzle对象: 
$class = new \ReflectionClass($class_path);
return $class->newInstance($config['timeout'], $config['base_uri'], $cache_ins);

难道这个就是很好的技术吗?

====================================================


====================================================


====================================================


====================================================

据说Facade是为了简化写法, 好记,也有人说要废除这个特性, 据说这个特性有很好的的testability 测试性, 我不清楚, 这个是怎么说出来的理由是什么?

很多Facade 是系统写好的, 在illuminate\support\Facade下面,

从__callStatic这个方法入手,

 

public static function __callStatic($method, $args)
{
$instance = static::getFacadeRoot();

if (! $instance) {
throw new RuntimeException('A facade root has not been set.');
}

return $instance->$method(...$args);
}

 

$instance 就是 这个 facade 的 getFacadeAccessor 返回的字符串在 service container里面所代表的的对象,
这里面有个 throw 提示错误, 貌似这样比较的友好么?

return $instance调用facade静态调用的方法. 完了。 那对测试有何影响?

 


====================================================


====================================================


====================================================


====================================================


====================================================


====================================================


====================================================


====================================================


====================================================


====================================================


====================================================


====================================================


====================================================


====================================================


====================================================


====================================================


====================================================


====================================================


====================================================


====================================================


可以理解成分两步: 配置、register, 因为只有配置了才有被调用去register, 也许不配置直接在appserviceProvider里面可以直接生效。。。。


service: 具体工作的类
provider: 把这个工作的类注册到service container去 - 直接的目的就是,等到要用这个类的时候, 在任何地方都可以直接调用$this->app->make()
调用方法就完全一致了,


 


貌似service provider 分为3个部分


1, config/app.php/$providers
2, php artisan make:provider xxxxxxServicerProvider
猜测: 如果只需要register, 那么可以简易的register, 即在appServiceProvider下面的


    public $bindings = [
        ServerProvider::class => DigitalOceanServerProvider::class,
    ];



    public $singletons = [
        DowntimeNotifier::class => PingdomDowntimeNotifier::class,
        ServerToolsProvider::class => ServerToolsProvider::class,
    ];

 


所有的service provider的名字放在 config/app.php里面的的$providers数组下面, 这个属于配置部分


php artisan make:provider RiakServiceProvider

provider本身也是一个类, 需要register和boot方法, 等待被调用, 然后




 



posted @ 2020-05-28 13:19  qqisnow2021  阅读(173)  评论(0编辑  收藏  举报